一个简单的正则表达式,在Ruby上表现非常糟糕

时间:2018-01-29 14:09:15

标签: ruby regex

我有一个简单的Ruby正则表达式需要很长时间来计算:

"fußball "*20 =~ /^([\S\s]{1000})/i

如果我删除/i标记,它的工作速度非常快。它为什么这么慢? (我没有等待执行完毕)

我知道这个正则表达式可能没有意义,但我想知道引擎盖是什么。

错误报告:https://bugs.ruby-lang.org/issues/14418

1 个答案:

答案 0 :(得分:1)

默认情况下,.与换行符不匹配。 [\s\S]是围绕这个问题的黑客。在Ruby中,您可以使用/ m标志使点匹配所有字符。它位于文档Ruby Metacharacters and Escapes

[\S\s]由于未知原因非常缓慢,但您可以将其更改为"fußball "*20 =~ /^(.{1000})/mi,其执行相同但更快的