所以我必须使用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版本和工作版本。
我会说这是由于一些超时的变化,但我找不到任何有关的虔诚的信息