【发布时间】:2011-11-22 12:28:43
【问题描述】:
这是我的正则表达式
((?:(?:'[^']*')|[^;])*)[;]
它用分号标记字符串。例如,
Hello world; I am having a problem; using regex;
结果是三个字符串
Hello world
I am having a problem
using regex
但是当我使用一个大的输入字符串时,我得到了这个错误
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
这是怎么引起的,我该如何解决?
【问题讨论】:
-
你解析的字符串有多大?
-
这个问题已经很老了,但是我可以使用所有格量词(
*+而不是*)来解决类似的问题,以避免回溯 -
我也应该使用原子组
(?>..)而不是组(?:..)来防止回溯
标签: java regex stack-overflow