【发布时间】:2017-01-14 18:48:47
【问题描述】:
所以我必须使用 php 7,并且我有以下正则表达式,它在 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 版本的所有机器
【问题讨论】:
-
连续三个反斜杠?
-
仅供参考:对于正则表达式引擎,您不需要转义
'或",对于 PHP 引擎只需转义一次。 -
@ThomasAyoub 它的行为与我的行为相同。如果您检查我编辑的问题,我有一个它不起作用的 php 版本列表。你的也一样。它可以在 VM 上运行,但生产和 windows 并不快乐,它返回时是空的。
标签: php regex preg-match-all