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

Java regex match stack overflow

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

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

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

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

原始和扩展

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

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