Java正则表达式: avoiding logical operator

标签 java regex

以下正则表达式在应用于大型 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/

相关文章:

javascript - 正则表达式有一个异常(exception) - 如果数字是下一个符号,则不匹配所有内容

php - 固定字符串的正则表达式

javascript - 如何替换Javascript中的所有字符串?特别是特殊字符的组合

javascript - 为什么这个 p 标签被添加为新行?

java - 执行后重新检查 rcp 处理程序

java - 累积列表中重复元素的值

java - 网络浏览器中的录音小程序/Flash

java - 如何减小我的 java/gradle docker 镜像大小?

java - 使用 Netty 解码 GET 和 POST 方法

javascript - javascript 中的正则表达式lookbehind