正则表达式:Perl中非常慢的正则表达式-如何优化?

奥莱·丹吉

这个:

echo BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BBBBBBBBBBBBBBBBBBBBBBBBBBBBA |
  perl -pe '/^(.*?B(?:A.*?B){30})A/'

在我的机器上花费了惊人的8秒钟。我原本预计最多要花几毫秒的时间。

这需要不到10毫秒的时间:

echo BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BBBBBBBBBBBBBBBBBBBBBBBBBBBBA |
   perl -pe '/^(.*?B(?:A.*?B){30})A/'

我怎样才能使第一轮走得更快?

我将需要A和B为正则表达式,即它们将不只是单个字母。

奥莱·丹吉

使用否定的前瞻和.

perl -pe '/^((?:(?!BA).)*?B(?:A(?:(?!BA).)*?B){30})A/'

不是很漂亮,但是可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章