3

正規表現を使用するときに「?=」は何をするのか誰か教えてもらえますか?これが私が解読しようとしているコードフラグメントの例です:

password.matches("(?=.*\\d.*\\d.*)^[\\w]{8}.*$");

ありがとう。

4

2 に答える 2

7

それは前向きな先見です。その特定の表現では、パスワードには少なくとも2桁の数字(\d)が必要であると言っています。

また、先読みは入力を消費せず、単なるアサーションであることに注意してください。

たとえば、正規表現では、先読み部分((?=.*\\d.*\\d.*)passwordは、に少なくとも2桁の数字が含まれていることを表明し、式の残りの部分は文字列全体を消費[a-zA-Z_0-9]し、最初に少なくとも8つの単語文字(つまり、)を一致させようとします。ストリング。

于 2012-08-08T21:45:47.503 に答える
3

これは先読みです。位置の後に指定された式が続くかどうかを確認するゼロ幅の一致。

http://www.regular-expressions.info/lookaround.html

あなたのシナリオでは、次のような文字列を探しています。

  • 2桁の数字を含む文字列で始まります(先読みによって強制されます)
  • 8語の文字で始まります(残りの正規表現と一致します)

先読みは実際には試合の一部ではありません。\b単語の境界( )または文字列の先頭()のように動作し^ます。

于 2012-08-08T21:45:24.947 に答える