Java正则表达式匹配堆栈溢出

标签 java regex stack-overflow

Pattern eqPattern = Pattern.compile("(.*?)([a-z0-9\\_\\.]*) eq \"(((\\\\\")|[^\"])*)\"([\\s]*.*)", Pattern.CASE_INSENSITIVE);

这是我的正则表达式。 当我尝试匹配一个长字符串时,出现堆栈溢出。 该模式将匹配类似 column1 eq "abc"和 column ne "abc"; (\\\")|[^\"]): 跳过"in inside""。 我想问一下如何重写这个以防止堆栈溢出。

最佳答案

最好的方法是从正则表达式中删除交替。
可以这样做,它使用展开的循环代替:

"(.*?)([\\w.]*) eq\"([^\"\\\\]*(?:\\\\[\\S\\s] [^\"\\\\]*)*)\"(\\s*.*)"

原始和扩展

 ( .*? )                       # (1)
 ( [\w.]* )                    # (2)
 [ ] eq [ ] 
 "
 (                             # (3 start)
      [^"\\]* 
      (?:

           \\ [\S\s] 
           [^"\\]* 
      )*
 )                             # (3 end)
 "
 ( \s* .* )                    # (4)

关于Java正则表达式匹配堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58701781/

相关文章:

javascript - 电话号码的正则表达式(不包括特殊字符)

c# - for 循环如何与堆栈溢出相关?

.net - 防止语言解释器中的StackOverflow

java - FileNotFoundException - 在 java 中读取文本文件

java - 未映射的 POJO 在 native 查询的结果异常中用作类类型

javascript - 从字段中删除 GUID(如果存在)

正则表达式 : Match text NOT part of a HTML tag

c++ - 在 C++ 中解决 StackOverFlowException

java - 注释 : {@org. springframework.beans.factory.annotation.Autowired(required=true)}

java - 替换 Java 中过时的 Hashtable 类