具有指数运行时间的 PCRE 正则表达式


PCRE regular expression with exponential running time

在某些情况下,

使用递归回溯的正则表达式实现可能会表现出指数级运行时间。

我试图为 PCRE 引擎找到这样的病理正则表达式。

我已经尝试了几个正则表达式,已知这些正则表达式对于 Perl 正则表达式(例如这个)是指数级的,但在我的测试中,它们都没有表现出 PCRE 的指数级运行时。

在您的测试中,是否所有正则表达式都会失败? 当他们失败时,你是否确切地找到了原因? 也许匹配失败是因为正则表达式引擎检测到过多的回溯。 我不知道这是否会发生,但请尝试一个应该成功的正则表达式,如下所示:

(?i)lorem(?:.|'s)*pri'.

使用RegexBuddy,我将该正则表达式应用于下面文本的第一段,并按预期突出显示了整个段落。 当我删除段落末尾的句点时,突出显示消失了,调试器说它在一百万次操作后放弃了。 这并不奇怪,但是当我把句号放回去并添加第二段时,它仍然失败了——又回溯了太多。


Lorem ipsum tritani impedit civibus ei pri, legimus antiopam no sed, quo id everti forensibus maiestatis.Vim ad intelllegat consequuntur.Te dicam impedit inciderint mea.Usu prompta alterum contentiones no, ut esse fabellas splendide pri.

Ne utroque nominavi moderatius qui, ius at suas velit nihil, vidit blandit facilisi pri ut.Ad vel offendit reprehendunt, mea ex quem ipsum complectitur.Veri cetero feugait cu usu, in dolor corpora adolescens vim, at sit voluptua placerat sadipscing.Minim admodum constituam eos ut, vix ut movet causae tractatos, in pro dicat dicta dolores.动力 praesent eum no.