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)
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)