java - RegEx 换行符遇到 StackOverflowError

标签 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 匹配器。

最佳答案

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

\\r?\\n

这里,\\r? 匹配一个或零个 CR 符号,而 \\n 只匹配 1 个 LF 符号。

或者,使用通用的

\\R

supported beginning with Java 8 .

关于java - RegEx 换行符遇到 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39204882/

相关文章:

android - 如何获取堆栈大小

asp.net - VimService55.XmlSerializers.dll 中发生类型 'System.StackOverflowException' 的未处理异常

java - HashMap.this.clear() 是什么意思,这个是怎么工作的

java - 哪个是更好的构造函数?空的还是使用字段?

java xpath 从 xml 中删除元素

regex - 从正则表达式构造字符串

java - 我收到一个StackOverflowError,它递归调用相同的错误

java - 如何使用 NetBeans IDE 控制 Java/Swing GUI 组件对齐?

javascript - 正则表达式和 JavaScript

regex - Perl 正则表达式从替换中返回匹配项