0

誰かがこの正規表現を説明してもらえますか?

^(?=.*prodCode=).*$
4

3 に答える 3

9

この素敵な正規表現の説明から:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                      the beginning of the string
--------------------------------------------------------------------------------
  (?=                    look ahead to see if there is:
--------------------------------------------------------------------------------
  .                      any character except \n
--------------------------------------------------------------------------------
  prodCode=              'prodCode='
--------------------------------------------------------------------------------
  )                      end of look-ahead
--------------------------------------------------------------------------------
  .                      any character except \n
--------------------------------------------------------------------------------
  $                      before an optional \n, and the end of the string

編集

質問のテキストの正規表現が変更されたため、説明の最後から 2 行目は次のように変更されます。

--------------------------------------------------------------------------------
  .*                     any character except \n (0 or more times (matching
                         the most amount possible))
--------------------------------------------------------------------------------
于 2012-07-20T07:43:15.793 に答える
1

行検索位置の先頭から の前に任意の記号を配置しますprodCode=(?=)位置が一致しないことを確認するだけです。したがって、あなたの状況では、行に文字列が存在する場合、そうでない場合はany symbol + prodCode=行全体に一致し、false を返します。

于 2012-07-20T07:44:00.970 に答える
1

これは、文字列がそのprodCode=中に含まれている場合に一致し、完全な文字列に一致します。

別の書き方 (大まかに言えば、メソッドの戻り値を正規表現の一致として悪用) は次のようになります。

if (s.indexOf("prodCode=") != -1)
    return s;
于 2012-07-20T07:44:22.500 に答える