Java正则表达式:避免逻辑运算符

时间:2016-05-14 20:28:43

标签: java regex

以下正则表达式在应用于大型html页面时会创建StackOverflowError:

<li.*?>(.|\s)*?</li>

我的假设是,由于逻辑“OR”运算符(|)在匹配器中创建递归调用,并且由于需要解析大的html页面大小,它会创建堆栈溢出。

有没有办法可以在没有“OR”运算符的情况下重写这个正则表达式(知道我想要捕获可能分成多行的内容,因此需要\s)?

非常感谢, 汤姆

1 个答案:

答案 0 :(得分:2)

以下使用DOT_ALL, (?:s)让点.也匹配换行符。

(?s)<li[^>]*>.*?</li>

重要的是,没有回到<li...>,因此我选择的变化。