RegEx换行符遇到StackOverflowError

时间:2016-08-29 11:13:11

标签: java regex stack-overflow

我在Java RegEx中使用\\r\\n|\n来匹配换行符。我不关心类似mac的换行符。每次运行我的代码时,我都会收到类似这样的StackOverflowError:

java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Neg.match(Pattern.java:4986)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
at java.util.regex.Pattern$Slice.match(Pattern.java:3870)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$Dollar.match(Pattern.java:3621)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)

依旧......

如果删除\\r\\n,则不会出现错误,因此只有\\n。但结果并不像它需要的那样......

!请注意,我处理的输入数量高达140k,大约50k匹配,每场比赛5-6组。较小的输入按预期工作。使用相同RegEx和相同输入的早期版本也可以使用。

提前致谢;)

修改 我在while循环中使用matcher.find()来访问java匹配器。

1 个答案:

答案 0 :(得分:3)

轮换通常会导致堆栈溢出问题(请参阅this answer)。您可以使用以下模式而不交替使用可选模式:

\\r?\\n

此处,\\r?匹配一个或零个CR符号,\\n仅匹配1个LF符号。

或者,使用通用

\\R

supported beginning with Java 8