Formatter
オブジェクトまたはString.format()
で%n
を使用して改行を取得すると、改行を含む文字列と一致しません。次のプログラムをご覧ください。
public class RegExTest {
public static void main(String[] args) {
String input1 = String.format("Hallo\nnext line");
String input2 = String.format("Hallo%nnext line");
String pattern = ".*[\n\r].*";
System.out.println(input1+": "+input1.matches(pattern));
System.out.println(input2+": "+input2.matches(pattern));
}
}
そしてその出力:
Hallo
next line: true
Hallo
next line: false
ここで何が起こっているのですか? 2番目の文字列が一致しないのはなぜですか?
Javaのバージョンは1.6.0_21です。
Pattern.DOTALL
作成するフラグ.
改行に一致しますが、デフォルトでは一致しません。 (?s)
表記。だから、この正規表現はあなたが望むことをします:
String pattern = "(?s).*[\n\r].*";
Windowsでは、Javaでは、\n
はLF、\r
はCR、%n
はCRLFです。あなたのパターンは後者と一致しません。
Java 8以降)、正規表現で \R
を使用して、任意の行末シーケンスに一致させることができます。
改行マッチャー
\R
Unicodeの改行シーケンスは\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
と同等
例:
String pattern = ".*\\R.*";
String.format("Hallo\nnext line").matches(pattern); // true
String.format("Hallo%nnext line").matches(pattern); // true
String.format("Hallo same line").matches(pattern); // false