以下Python代码非常慢:
import re
re.match( '([a]+)+c', 'a' * 30 + 'b' )
Run Code Online (Sandbox Code Playgroud)
如果用更大的常数替换30,情况会变得更糟.
我怀疑由于连续性导致的解析歧义+是罪魁祸首,但我在regexp解析和匹配方面不是很专业.这是Python regexp引擎的错误,还是任何合理的实现都会这样做?
我不是Perl专家,但以下回复非常快
perl -e '$s="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; print "ok\n" if $s =~ m/([a]+)+c/;'
Run Code Online (Sandbox Code Playgroud)
并且增加'a'的数量并不会显着改变执行速度.