次のスニペットがあるとします。
Pattern pt = Pattern.compile("\ndog", Pattern.LITERAL);
Matcher mc = pt.matcher("\ndogDoG");
while(mc.find())
{
System.out.printf("I have found %s starting at the " +
"index %s and ending at the index %s%n",mc.group(),mc.start(),mc.end());
}
出力は次のようになります。
I have found
dog starting at the index 0 and ending at the index 4.
Pattern.LITERAL
これは、このリンクがどのように言っているのかを指定したにもかかわらず、次のことを意味します。
Pattern.LITERAL パターンのリテラル解析を有効にします。このフラグが指定されている場合、パターンを指定する入力文字列は一連のリテラル文字として扱われます。入力シーケンス内のメタ文字またはエスケープ シーケンスには、特別な意味はありません。
ただし、上記のスニペットからの出力は\n
エスケープ シーケンスを解釈しますが、リテラルのようには扱いません。
このチュートリアルでそうすべきではないと指定しているのに、なぜそのようになるのでしょうか?
\n は行末記号ですが、エスケープ シーケンス文字のままです。