【发布时间】:2019-03-12 13:18:36
【问题描述】:
给定代码:
$my_str = '
Rollo is*
My dog*
And he\'s very*
Lovely*
';
preg_match_all('/\S+(?=\*$)/m', $my_str, $end_words);
print_r($end_words);
在 PHP 7.3.2 (XAMPP) 中,我得到了意外的输出
Array ( [0] => Array ( ) )
而在PhpFiddle 中,在 PHP 7.0.33 上,我得到了我的预期:
Array ( [0] => Array ( [0] => is [1] => dog [2] => very [3] => Lovely ) )
为什么我会有这种差异? 7.0.33 之后正则表达式的行为是否发生了变化?
【问题讨论】:
-
一个有用的测试网站是否是版本差异,而不是平台或配置,是3v4l.org 在这种情况下it shows the expected output for all versions 所以在你的测试环境中还有一些其他的差异。我的猜测与 Windows 与 Unix 行尾有关。
-
在测试上述代码时,我无法重现您的问题。 Here's a demo。测试 7.1.25 - 7.3.3 并给出预期结果。如果您检查“eol 版本”,它甚至可以工作,它测试 4.3 的所有版本
-
通过命令行使用 7.3.3 我看到了同样的故障(空数组)。
-
我在 Ubuntu 机器上通过 CLI 在 7.3.2 和 7.3.3 上进行了测试,它仍然给了我预期的结果。
-
@WiktorStribiżew 我不会说这很容易或显而易见,但谢谢:-)