Java正規表現を使用すると、次の例が見つかりました
Print\\-Services
なぜ\\-
、それは - をエスケープするのだろうか?
正規表現で「-」をエスケープする必要はありません。[...]
文字クラス指定内のメタ文字のみです。
それがJava文字列リテラルであった場合、最初のもの'\'
は2番目のものをエスケープし、それは正規表現で'\'
与え\-
られます...これはナンセンスです1 .
それが文字列リテラルではない場合、最初は正規表現で'\'
2番目をエスケープしています。'\'
それはナンセンスではありません。バックスラッシュ文字に一致することを意味します。
1 - しかし、それは法的なナンセンスです。javadoc には次のように記載されています。 冗長なバックスラッシュは無視されます。
"Print\\-Services"
Java プログラムのように書き出される文字列リテラルを参照していると仮定します。その場合、正規表現にはエスケープされた「-」文字が含まれますが、これは意味がありませんが、明らかに java.util.regex.Pattern によってエラーとして扱われません。javadoc から:
バックスラッシュは、その文字がエスケープされていない構造の一部であるかどうかに関係なく、アルファベット以外の文字の前に使用できます。
例として:
Pattern pattern1 = Pattern.compile("Print\\-Services");
Pattern pattern2 = Pattern.compile("Print-Services"); // No PatternSyntaxException
// Pattern pattern3 = Pattern.compile("Print\-Services"); // Not valid Java syntax
徹底的にテストしたわけではありませんが、Pattern がエスケープ文字を無視しているようです。
System.out.println( pattern1.matcher("Print-Services").matches() ); // true
System.out.println( pattern2.matcher("Print-Services").matches() ); // true
その例を提供した人は誰でも、紛らわしい、または混乱した例を示していたようです。