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 .*?)一致しません。LocationL

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 に答える