我有一个简单的Ruby正则表达式需要很长时间来计算:
"fußball "*20 =~ /^([\S\s]{1000})/i
如果我删除/i
标记,它的工作速度非常快。它为什么这么慢? (我没有等待执行完毕)
我知道这个正则表达式可能没有意义,但我想知道引擎盖是什么。
答案 0 :(得分:1)
默认情况下,.
与换行符不匹配。 [\s\S]
是围绕这个问题的黑客。在Ruby中,您可以使用/ m标志使点匹配所有字符。它位于文档Ruby Metacharacters and Escapes
[\S\s]
由于未知原因非常缓慢,但您可以将其更改为"fußball "*20 =~ /^(.{1000})/mi
,其执行相同但更快的