現在のシナリオには違いはありません。通常の文字列エスケープシーケンスはリテラルバックスラッシュのヘルプ(を用いて形成されている単一のバックスラッシュの助けを借りた後、有効なエスケープ文字("\n"
、"\r"
、など)と正規表現エスケープシーケンスで形成されていることがあり、 Java文字列リテラルの二重バックスラッシュ)と有効な正規表現エスケープ文字("\\n"
、"\\d"
など)を使用します。
"\n"
(エスケープシーケンス)がリテラルLF(改行)であり"\\n"
はLFシンボルと一致する正規表現エスケープシーケンスです。
"\r"
(エスケープシーケンス)がリテラルCR(キャリッジリターン)であり"\\r"
はCRシンボルに一致する正規表現エスケープシーケンスです。
regex escapeのサポートリストについては、Java regex docsのリストを参照してください。
ただし、Pattern.COMMENTS
flag(正規表現エンジンは、パターン内のすべてのエスケープされていない空白を無視すること、コメントをご紹介してきれいにパターンをフォーマットするために使用される)、あなたは(改行を定義するために"\\n"
または"\\\n"
を使用するかLFが必要になります使用している場合)をJava文字列リテラルに、"\\r"
または"\\\r"
を使用してキャリッジリターン(CR)を定義します。
Java testを参照してください:
String s = "\n";
System.out.println(s.replaceAll("\n", "LF")); // => LF
System.out.println(s.replaceAll("\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\n", "<LF>"));
// => <LF>
//<LF>
なぜ<LF>
+改行+ <LF>
を生産する最後のものはありますか? "(?x)\n"
は""
に等しいので、空のパターンであり、改行の前と後の空のスペースに一致します。
違いはありません。 '\\ n'はLFと一致し、' \ n'はLFと一致します。 –
コメントモードを使用する場合は、違いがあります。 –
@SebastianProskeそれは本当です。現在の正規表現を考えると、違いはありません。 '(?x)'が使用されている場合、空白文字はJava正規表現でエスケープする必要があります。彼らが文字クラスで使用されていても。 –