如何在正则表达式中指定新行或字符串结尾?

时间:2013-10-12 21:41:25

标签: java regex

我的模式不适用于所有字符串,因为如果它到达没有新行\n的字符串,它将抛出异常。如何修改(?:L.*?)\\n以使其匹配到\\n或字符串结尾?

Pattern patternL = Pattern.compile("(?:L of .*?)\\n", Pattern.DOTALL);
Matcher matcherL = patternL.matcher(text);
matcherL.find();

3 个答案:

答案 0 :(得分:4)

简单使用:(?:\\n|$),因此您的正则表达式变为:

Pattern patternL = Pattern.compile("(?:L of .*?)(?:\\n|$)", Pattern.DOTALL);

答案 1 :(得分:2)

对于Java,这是匹配行尾或单个LF字符所需的内容:

(\\n|$)

或者

(\\r\\n|\\n|$)

如果你想准确了解换行符,也包括CRLF

答案 2 :(得分:2)

匹配换行符或行尾的

@ Sniffer 答案是正确的,但是从您在(?:L of .*?)上方发布的代码中,这与Location或除了字母L

之外,任何一个字都重要
Pattern patternL = Pattern.compile("Location of .*?(?:\\n|$)", Pattern.DOTALL);

Pattern.MULTILINE告诉Java接受锚点^$以匹配每行的开头和结尾(否则它们只匹配整个字符串的开头/结尾) 。

Pattern patternL = Pattern.compile("^Location of .*", Pattern.MULTILINE);

我从上面的非贪婪到贪婪的比赛变为匹配尽可能多的,使用非贪婪的匹配将匹配尽可能少的除非您使用行结束$

请参阅what I mean by matching least amount possible