根据 perlre 的说明,以下代码应该需要几秒钟才能执行完毕:
文档中提到:
考虑上面的模式在几秒钟内无法检测出
如所见,在我的笔记本电脑上仅需一小部分时间. 即使运行一百万个
$ time perl -E '$_="((()" . ("a") x 18; say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
real 0m0.006s
user 0m0.000s
sys 0m0.005s
文档中提到:
考虑上面的模式在几秒钟内无法检测出
((()aaaaaaaaaaaaaaaaaa
的不匹配, 但是每增加一个字符则检测时间翻倍.如所见,在我的笔记本电脑上仅需一小部分时间. 即使运行一百万个
a
,也只需要半秒钟完成.$ time perl -E '$_="((()" . ("a") x 1000000; say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
real 0m0.454s
user 0m0.446s
sys 0m0.008s
我在这里缺少什么?
echo "((()aaaaaaaaaaaaaaaaaa" | perl -nE 'say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
吗? - Håkon Hæglandperl -E 'say "((()" . ("a") x 1000000;' | perl -nE 'say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
半秒钟内运行完成 - Håkon Hæglanduse re 'debug'
命令,它会告诉你处理re
的步骤。请注意,我已经对原文进行了翻译,不含解释和其他内容。 - Sobrique