如何在非常大的值上解决Regex StackOverFlowError?

时间:2015-06-29 07:46:40

标签: java regex

我正在使用Apache的RegExp Jakarta 2.0.8来使用以下正则表达式验证值:

^[\\w\\s!$()*,./:;=?@\\]\\[{}~\\-%]+$ 

基本上,它不允许使用Unicode或某些特殊字符 我正在运行一个java代码,使用这个正则表达式对一个非常大的文本执行此验证,我收到此错误:

Caused by: java.lang.StackOverflowError
  at org.apache.regexp.RE.matchNodes(RE.java:1376)
  at org.apache.regexp.RE.matchNodes(RE.java:1376)
  at org.apache.regexp.RE.matchNodes(RE.java:1376)
  at org.apache.regexp.RE.matchNodes(RE.java:1376)
  at org.apache.regexp.RE.matchNodes(RE.java:1376)

我认为我的正则表达式没有被有效地写入并导致检查中的循环导致堆栈溢出错误。

问题是:有没有更好的方法来编写这个正则表达式?

1 个答案:

答案 0 :(得分:3)

似乎添加了不情愿的说明符修复了Apache RE的问题:

"^[\\w\\s!$()*,./:;=?@\\]\\[{}~\\-%]+?$"

虽然我强烈建议使用JDK标准regexp。它甚至可以与您的原始正则表达式一起使用,并且通常可以更快地工作并支持更多功能。