我今天早些时候Catastrophic backtracking issue with large string using regular expression遇到了这个问题。
在Wiktor Stribiewews的回答中,非常直观地解释了为什么OP (OP regex, 317 steps)的惰性模式不适用于长字符串,因此失败了,建议使用new regex, 46 steps。
现在,OP希望在已知标签之间匹配文本。在我看来,这是对超前和向后看的完美,最明显的用法,因为您实际上是在两个已知字符串之间寻找某种东西,因此将其做成this regex。它具有131个步骤。它不如OPs差,但远远落后于46。
我本以为是寻找先行者,一旦发现它与寻找先行者相匹配,但是考虑到这131个步骤,情况似乎并非如此。
超前和后退如何在性能方面发挥作用?我已经找到了一些有关文档(1,2),但找不到有关它们内部工作方式或使用它们的性能含义的信息。