有没有人知道为什么这个正则表达式导致我的应用程序挂起?
/^(?:((?:.+?)(?: of the )?)+) of the (?:(.+?)) (?:"(.+?)")$/
当我尝试使用它来匹配这样的字符串时,它会挂起:
'description of the post "This is a Post"'
但是当我使用它来匹配这样的较短字符串时,似乎发生得非常快:
'age of the person "Bob"'
关于为什么会发生这种情况或如何解决这个问题的任何想法?
答案 0 :(得分:2)
这是正则表达式中catastrophic backtracking的结果,正则表达式的以下部分可能是罪魁祸首:
((?:.+?)(?: of the )?)+
每次嵌套重复时,都应该尝试重构正则表达式。在这种情况下,我认为您可以将整个部分简化为.+
,并使您的正则表达式的行为方式相同。
答案 1 :(得分:1)
这可能是因为有太多的回溯/分组需要花费大量时间来解析更大的字符串。
正如你在演示中看到的那样:http://regex101.com/r/xC3dF0,由于大量的回溯,系统无法解析字符串