我有一个简单的正则表达式问题。我有以下多行字符串:
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/