作为一个常见的例子,假设我们想要匹配一些单词模式$word_pattern
,但它周围可能有空格。这是正则表达式的非常常见的用法。通常人们会写
/\s*$word_pattern\s*/
但这在失败的情况下效率很低,不是吗?有效的代码不应该是:
/(?>\s*)$word_pattern\s*/
但我从来没有看到实际写...
另外:是的,我现在对其进行了基准测试,并且由于其中一位响应者可能在这里遇到了空格问题,因此我不想使用它。
所以现在我有一个非常长的文件a.txt
(1GB),完全充满了 character a
。
接着
perl -ne 'print !/a*b/' < a.txt
perl -ne 'print !/(?>a*)b/' < a.txt
两者都需要大量但相同的时间(超过读取文件本身所需的时间)。
我完全不明白。有人能解释一下怎么可能吗?Perl 文档清楚地表明,在第一种情况下,将会进行回溯。