php7的正则表达式工作方式与php5中的不一样


PHP 7 regex not working the same way as in 5

所以我必须使用php 7,我有以下regex在5.5和5.6中工作得很好。

([''''''"].*[''''''"])([''s]*[''s]*=>[''s]*[''s])(''[([^''['']]|(?R))*[''s]*[''s]''])/m
当我使用preg_match_all在5的任何版本中运行

时,我得到了正确的结果。基本上,我试图匹配一个数组在形式为

的文本文件中
'key' => [
   'val1 => 'sdsd',
   'val2' => '3e3',  
]

上面的表达式选择这个数组。在PHP 7(7.0.8和7.0.9)中没有返回任何匹配。

谁有任何想法,为什么和更好的是,我们如何移植表达式到7?

编辑:

使用的代码

可以在这个要点中找到

奇怪的是,它在某些版本的php 7上工作。例如,我的虚拟机正在运行

PHP 7.0.9-1+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.9-1+deb.sury.org~trusty+1, Copyright (c) 1999-2016,        by Zend Technologies

运行正常,另一方面,生产服务器运行

PHP 7.0.9 (cli) (built: Jul 22 2016 11:36:32) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.9, Copyright (c) 1999-2016, by Zend Technologies

根本不起作用。无论如何,$matches总是空的。我用的另一个ubuntu桌面也是这样。它也不能在使用

的windows上工作
PHP 7.0.9 (cli) (built: Jul 20 2016 10:47:41) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

它可以在所有机器上使用不同的5。x版本

我已经得到了它的工作与这个正则表达式(匹配是相同的比在您的要求):

$matchArray = '~([''"][^''"]*[''"])('s*=>'s+)('[(?:[^'[']])*'s+'])~m';

代替你的:

$matchArray = '~([''"].*[''"])(['s]*['s]*=>['s]*['s])('[([^'[']]|(?R))*['s]*['s]'])~m';

查看bug版本和工作版本。

说这是由于一些超时的变化,但我找不到任何有关的虔诚的信息