正規表現:正規表現の先頭で前方予測を使用するものは何ですか?

正規表現:正規表現の先頭で前方予測を使用するものは何ですか?

肯定的な見通しはある程度理解する。

X(?= Y)は、「Xを探しますが、Yが後ろにある場合にのみ一致します」を意味します。

しかし、以下の正規表現では、正規表現の冒頭で肯定的な予測の重要性を理解していません。

^(?:(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})

肯定的な予測が最初に何をしているのか、上記の正規表現が何をしているのかを説明できる人はいますか?

編集する- 役に立つなら、完全正規表現は次のようになります。 -

^(?:(?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})[A-Za-z0-9]{8,64}$

完全正規表現は、大文字、小文字、数字、および8から64文字の長さを含む文字列と一致する必要があります。

答え1

あなたの^(?:(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})正規表現は次のとおりです

^(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?!.*(.)\1{2,})`

より正規表現のデモ

ここでプレビューするには、改行文字以外のゼロ個以上の文字の後に特定の?=パターンがあるか( )ない( )が必要です。?!これは一般的なパスワードチェック正規表現です。

^各フォワードチェックを実行するのに十分なので、アンカー文字列startの後に使用されます。一度文字列の先頭に。ツアーは幅0のアサーションなので、4つのツアーはすべて文字列の先頭で1つずつトリガーされます。

一致する

  • ^- 文字列の始まり
  • (?=.*\d)- 改行文字を除く0個以上の文字の後には少なくとも1つの数字が続く必要があります。
  • (?=.*[A-Z])- 改行以外のゼロ個以上の文字の後には、少なくとも1つ以上の大文字のASCII文字が続く必要があります。
  • (?=.*[^A-Za-z0-9])- 改行文字以外の0個以上の文字の後には、ASCII英数字以外の文字が1つ以上でなければなりません。
  • (?!.*(.)\1{2,})- 改行文字以外の0個以上の文字の後には、改行文字以外の同じ文字の3個以上の連続文字が続くことはできません。

正規表現関数に完全な文字列一致が必要な場合があるため、.*これはパターンの最後に必要な場合があります。

2番目の正規表現は実際には次のようになります^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?!.*(.)\1{2,})[A-Za-z0-9]{8,64}$この正規表現のデモと説明。使用されている - パターン部分はASCII文字または数字のみに一致し、ASCII英数字以外の文字と一致しないため、すべての代替項目は(?=.*[^A-Za-z0-9])絶対一致しません。[A-Za-z0-9]{8,64}

関連情報