以下正则表达式在应用于大型html页面时会创建StackOverflowError:
<li.*?>(.|\s)*?</li>
我的假设是,由于逻辑“OR”运算符(|
)在匹配器中创建递归调用,并且由于需要解析大的html页面大小,它会创建堆栈溢出。
有没有办法可以在没有“OR”运算符的情况下重写这个正则表达式(知道我想要捕获可能分成多行的内容,因此需要\s
)?
非常感谢, 汤姆
答案 0 :(得分:2)
以下使用DOT_ALL, (?:s)
让点.
也匹配换行符。
(?s)<li[^>]*>.*?</li>
重要的是,没有回到<li...>
,因此我选择的变化。