一致させようとしている「キャラクター」は次のようになります。
"[/\\\\]"
最初に文字列に対してバックスラッシュを複製し、次に正規表現に対して再度複製します。
文字列をエスケープするためにバックスラッシュも使用する言語でバックスラッシュを使用する必要がある場合、これはおそらく最も厄介な正規表現です。
Javaコンパイラは"\\\\"
、ソースコード内の文字列を確認し、実際にそれをに変換します(エスケープ文字として"\\"
使用されるため)。\
次に、正規表現はそれを認識し、エスケープ文字として"\\"
も使用\
されるため、単一の\
文字として扱います。
Liu Yanがコメントで指摘しているように、次のいずれかを使用することで、 1つのレベルのバックスラッシュ(正規表現のもの)を取り除くことができます。
".*[/\\x5c].*"
".*[/\\u005c].*"
それはそれを少し読みやすくするかもしれません。
すべての削減が完了したら、両方のスラッシュで構成される文字クラスを指定し、問題の文字がどちらかに一致する場合はtrueを返します。
次のコードは、これが実際に動作していることを示しています。
public class testprog {
public static void checkString (String s) {
boolean yes = s.matches(".*[/\\\\].*");
System.out.println ("'" + s + "': " + yes);
}
public static void main (String s[]) {
checkString ("Hi/Hello/Bye/");
checkString ("Hi\\Hello\\Bye\\");
checkString ("Hi\\Hello/Bye\\");
checkString ("HiHelloBye");
}
}
そしてそれは出力します:
'Hi / Hello / Bye /':true
'Hi \ Hello \ Bye \':true
'Hi \ Hello / Bye \':true
'HiHelloBye':false