为什么在这个看似有效的正则表达式中进行灾难性的回溯?

时间:2015-08-10 15:07:00

标签: java regex

这是我的输入文字:

1. Text text
2. more text..
3. more text... 
4. more text.. 
5. more text.. 

some more text here.. 

1. This is another text.
2. This is another text contd
3. More text.. 

现在,当我使用这样的正则表达式匹配此文本时:

1\.(.+?)\n2\.(.+?)\n3\.

这很好,并且匹配前3行和后3行,但是,当我在正则表达式中包含其他数字时:

1\.(.+?)\n2\.(.+?)\n3\.(.+?)\n4\.(.+?)\n5.(.+?)

导致灾难性的回溯错误。

我正在使用regex101并标记g和s。

Test case with actual data on regex101.

为什么正则表达式引擎不会忽略文件末尾的第二个(部分)匹配?

1 个答案:

答案 0 :(得分:0)

^1\.(.+?)\n2\.(.+?)\n3\.(.+?)\n4\.(.+?)\n5\.(.+?)$

这对我有用。只需从结尾处删除无用的*。使用multiline标记。参见演示。

https://regex101.com/r/fM9lY3/34