【发布时间】:2016-10-07 00:43:07
【问题描述】:
使用java.util.regex 处理正则表达式会导致大字符串和复杂正则表达式的堆栈溢出(尤其是其中包含|)。
有没有办法在 Java 中更防御性地处理正则表达式,比如
- 正则表达式具有非递归模式
- 为这些正则表达式抛出一个可捕获的异常(而不是 java.lang.Stackoverflow 错误),
或任何其他不会杀死我的程序或使其处于不可恢复状态的机制?
【问题讨论】:
-
我建议您尝试简化正则表达式,而不是寻找堆栈溢出错误的解决方案。
-
没错,这通常是明智的。但是想出一个正则表达式其实很烦人,让它通过所有的单元测试,把它放在一个大的分析程序中看到它在凌晨 2 点崩溃,因为某些输入字符串真的很大。
-
这个答案已经回答了好几次了。实现一些超时机制:stackoverflow.com/questions/910740/…
-
@WiktorStribiżew:的确,这是一种合理的方法,但也不能令人满意,因为我必须根据我的筹码量来猜测时间限制。我的程序通常在晚上运行以完成某种工作。我不在乎正则表达式是否需要 5 分钟,只要它不会使 JVM 崩溃。
-
你想在你的程序中做什么?可能是您从不同的角度看待问题。