“我对JavaScript和PHP处理以下正则表达式的方式之间的差异感到困惑。
分别导致
如下所示:
结果是,
我不太担心警告。但似乎在JavaScript中,前瞻断言比在PHP中更“懒惰”。为什么会有差异?这是引擎中的一个漏洞吗?哪个理论上更“正确”?
在JavaScript中,”
'foobar'.replace(/(?=(bar))/ , '$1');
'foobar'.replace(/(?=(bar))?/ , '$1');
'foobar'.replace(/(?:(?=(bar)))?/, '$1');
分别导致
foobarbar
foobar
foobar
如下所示:
如此显示在jsFiddle上。
然而,在PHP中,
echo preg_replace('/(?=(bar))/', '$1', "foobar<br/>");
echo preg_replace('/(?=(bar))?/', '$1', "foobar<br/>");
echo preg_replace('/(?:(?=(bar)))?/', '$1', "foobar<br/>");
结果是,
foobarbar
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 9 in /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php/index.php(201) : eval()'d code on line 2
foobarbar
我不太担心警告。但似乎在JavaScript中,前瞻断言比在PHP中更“懒惰”。为什么会有差异?这是引擎中的一个漏洞吗?哪个理论上更“正确”?