0

有谁知道为什么这个正则表达式导致我的应用程序挂起?

/^(?:((?:.+?)(?: of the )?)+) of the (?:(.+?)) (?:"(.+?)")$/

当我尝试使用它来匹配这样的字符串时,它会挂起:

'description of the post "This is a Post"'

但是当我用它来匹配这样一个较短的字符串时,它似乎发生得很快: 'age of the person "Bob"'

关于为什么会发生这种情况或如何解决它的任何想法?

4

2 回答 2

2

这是正则表达式中灾难性回溯的结果,正则表达式的以下部分可能是罪魁祸首:

((?:.+?)(?: of the )?)+

每当您有嵌套重复时,您都应该尝试重构您的正则表达式。在这种情况下,我认为您可以将整个部分简化为.+并使您的正则表达式表现相同。

于 2012-08-28T16:53:50.340 回答
1

这可能是因为有太多的回溯/分组需要花费大量时间来解析更大的字符串。

正如您在演示中看到的:http ://regex101.com/r/xC3dF0 ,由于大量回溯,系统无法解析字符串

于 2012-08-28T16:45:23.573 回答