使用 java.util.regex
处理正则表达式会导致大字符串和复杂正则表达式(尤其是 |
中)的堆栈溢出。
有没有办法在 Java 中更防御性地处理正则表达式,比如
- 具有正则表达式的非递归模式
- 为这些正则表达式抛出一个可捕获的异常(而不是 java.lang.Stackoverflow 错误),
或任何其他不会终止我的程序或将其置于不可恢复状态的机制?
最佳答案
StackOverflowError
可以像任何异常一样被捕获和处理。错误表示您通常不应捕获的严重问题,但在这种情况下,您知道它是什么并且需要处理它。只需捕获它并处理这种情况(或重新抛出自定义异常)。
您可能还想考虑使用 -Xss
命令行标志来增加堆栈大小。
关于没有堆栈溢出的 Java 正则表达式解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673839/