正規表現のコンマ区切りのリストがあります。
.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]
カンマで分割しました。今、私はこの正規表現を生成されたパスワードと照合しようとしています。問題は、Pattern.compile
がエスケープされない角括弧を好まないことです。 [0-9]
のような文字列を取り、エスケープされた文字列\[0-9\]
を返す単純な関数を教えてください。
Pattern.quote(String)
を使用できます。
ドキュメントから:
public static String quote(String s)
指定された
String
のリテラルパターンString
を返します。このメソッドは、リテラルパターンであるかのように文字列sに一致するパターンを作成するために使用できる文字列を生成します。
入力シーケンス内のメタ文字またはエスケープシーケンスには、特別な意味はありません。
どういうわけか、上記の答えは私にはうまくいきませんでした。私のように後に来る人のために、ここに私が見つけたものがあります。
単一のバックスラッシュでブラケットをエスケープすると想定していましたが、パターンが文字列に格納されている場合は2つ使用する必要があります。最初のバックスラッシュは2番目のバックスラッシュを文字列にエスケープするため、正規表現は\]
を認識します。正規表現はバックスラッシュを1つだけ見るので、それを使用して角括弧をエスケープします。
\\]
正規表現では、これは単一の閉じ角括弧と一致します。
たとえば、改行を一致させようとしている場合は、バックスラッシュを1つだけ使用します。文字列エスケープパターンを使用して、文字列に改行文字を挿入しています。正規表現は\n
を認識しません-改行文字を認識し、それに一致します。これは文字列のエスケープシーケンスではなく、正規表現のエスケープシーケンスであるため、2つのバックスラッシュが必要です。
\ Qと\ Eの特殊文字を使用できます。\ Qと\ Eの間はすべて自動的にエスケープされます。
\Q[0-9]\E
Pattern.compile()
は角かっこで結構です。ひもを取れば
".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"
そして、それをコンマで区切ると、5つの完全に有効な正規表現が得られます。最初の正規表現は8つの非行区切り文字に一致し、2番目はASCII数字に一致します。以下同様です。 ".{8}"
や"[0-9]"
のような文字列に一致させたいのですが、何をエスケープする必要があるのかわかりません。