java - 正则表达式抛出 StackOverFlow 错误

标签 java regex

我有一个简单的正则表达式问题。我有以下多行字符串:

description: line1\r\nline2\r\n...

我正在尝试查找 description: 之后的所有行。我使用了以下正则表达式(以及更多):

description: ((.*\r\n){1,})

...没有任何成功。然后我发现Sun中有一个“Regexp StackOverflow”错误(声明为不会修复),请参阅Bug #5050507 。谁能给我提供克服这个恼人错误的神奇公式吗?请注意,行的总长度必须超过 818 字节!!

最佳答案

由于您要匹配文本描述之外的任何内容,因此您只需允许点与Pattern.DOTALL匹配换行符即可:

description:\s(.*)

所以,在 Java 中:

Pattern regex = Pattern.compile("description:\\s(.*)", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group(1);
}

与正则表达式的唯一语义差异(除了它不会破坏堆栈的事实之外)是,如果 description: 之后的任何内容不包含换行符,它也会匹配。另外,你的正则表达式不会匹配文件的最后一行,除非它以换行符结尾,我的会如此。哪种行为更可取是您的决定。

当然,您的功能可以像这样模拟:

description:\s(.*\r\n)

但我怀疑这真的是你想要的。或者是吗?

关于java - 正则表达式抛出 StackOverFlow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746727/

相关文章:

java - 警告 : JAVA_HOME environment variable is not set

java - 查找所有可能的枚举组合

正则表达式匹配,非常简单 :

python - ip地址和mac地址的正则表达式

ruby 正则表达式 : Matching a < without a matching >

regex - 如果一行以 = 结尾,则将下一行附加到它 (sed)

java - 测试用例没有按预期运行?

java - 在 heroku 上调试嵌入式 tomcat

java - 如何获取多个分隔符之间的字符串

Javascript 正则表达式移动设备音频替换