次の文字列の正規表現を作成したい
abc.xy9.aBBB-hhh7.abcDD_XYz
あれは、
- 最初の文字は小文字でなければなりません
- 最後の文字は小文字/数字にする必要があります
- との間
[A-Za-z0-9-_]
に.
ただし、入力文字列には少なくとも 3 文字、最大で 63 文字が含まれます。以下の表現を確認してください
^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$
次の文字列の正規表現を作成したい
abc.xy9.aBBB-hhh7.abcDD_XYz
あれは、
[A-Za-z0-9-_]
に.
ただし、入力文字列には少なくとも 3 文字、最大で 63 文字が含まれます。以下の表現を確認してください
^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$
^(([a-z][A-Za-z0-9_-]+[a-z0-9]\.)+[A-Za-z0-9_-]*[a-z0-9]|[a-z][A-Za-z0-9_-]+[a-z0-9])$
一致する場合は、長さを確認します (たとえば、PHP では preg_match が > 0 を返すことを確認し、strlen で合計の長さを確認します)。
ここでは、あなたの例から、各グループが文字列全体の終わりだけでなく、小文字または数字で終わっていると想定しています
あなたはすでに説明を与えました:
最初の文字は小文字:[a-z]
最後は小文字または数字: 中間[a-z0-9]
: [A-Za-z0-9-_.]
3 文字以上、最大 63 文字は、中間の正規表現を 1 ~ 61 回繰り返さなければならないことを意味します。
一緒:
[a-z][A-Za-z0-9_.-]{1,61}[a-z0-9]
ただし、文字列を囲む文字や数字とは異なるものが必要です。それがなければ、この正規表現は一致します。たとえば、次のようになります。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
これは、正規表現が 63 個の a を見つけて、その一致を主張できるためです。