以下正则表达式在应用于大型 html 页面时会创建 StackOverflowError:
<li.*?>(.|\s)*?</li>
我的假设是,这是由于逻辑“OR”运算符(|
)在匹配器中创建了递归调用,并且由于需要解析的 html 页面大小较大,因此创建堆栈溢出。
有什么方法可以在不使用“OR”运算符的情况下重写此正则表达式(知道我想要捕获可能分为多行的内容,因此需要 \s
)?
非常感谢, 汤姆
最佳答案
以下使用DOT_ALL, (?:s)
让点.
还匹配换行符。
(?s)<li[^>]*>.*?</li>
但重要的是,不能回掷 <li...>
发生了,因此我选择了这种变化。
关于Java正则表达式: avoiding logical operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231519/