这是我的正则表达式
((?:(?:'[^']*')|[^;])*)[;]
它在分号上对字符串进行标记。例如,
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)
这是什么原因导致的?我该如何解决?
*+
而不是*
)来避免回溯,解决一个类似的问题。 - Nahuel Fouilleul(?>..)
而不是组(?:..)
来防止回溯。 - Nahuel Fouilleul