3

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

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

3 回答 3

5

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

Pattern patternL = Pattern.compile("(?:L of .*?)(?:\\n|$)", Pattern.DOTALL);
于 2013-10-12T21:43:04.977 回答
2

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

(\\n|$)

也许

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

如果您想准确了解换行符,并包括 CRLF

于 2013-10-12T21:42:38.240 回答
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);

我从上面的非贪婪匹配到贪婪匹配以匹配尽可能多的数量,除非您使用行尾锚点,否则使用非贪婪匹配将匹配尽可能少的数量$

了解我所说的匹配最少数量的意思

于 2013-10-12T22:11:08.237 回答