7

次の正規表現があります。

^(?=.{8}$).+

私がこれを理解する方法は、任意のタイプの文字の 8 つに続いて、任意の文字の 1 つ以上を受け入れることです。前向き先読みがどのように機能するかを理解していないように感じます。正規表現の両方のセクションが「.」を探しているためです。どのシリーズのキャラクターもこれに当てはまりませんか?

私の質問は、正の先読みはこの正規表現にどのように影響し、一致する文字列の例は何ですか?

次の正規表現ツールで提供された場合、以下は一致しませんでした:

  • 123456781
  • (12345678)1
  • (12345678)
  • (abcdefgh)a
  • (abcdefgh)
  • abc
  • 123

編集: 最初の 2 つのデータ エントリを削除しました。正確に 8 文字と一致するようになったため、正規表現ツールを正しく使用していなかったことは明らかです。

4

3 に答える 3

10

^(?=.{8}$).+

文字列に一致します

aaaaaaaa

理由:

で始まるため、括弧内の内容は先読み?=です。

先読み内のコンテンツは解析されます - 文字どおりには解釈されません。

したがって、先読みでは、正規表現が一致する場合.{8}$(この場合は文字列の先頭) にのみ一致することが許可されます。したがって、文字列は正確に 8 文字である必要があり、それから終了する必要があり$ます。

次に、.+ はこれらの 8 文字に一致します。

于 2013-04-24T01:37:27.290 に答える
6

一致しようとしています:

^               # start of line, but...
(?=.{8}$)       # only if it precedes exactly 8 characters and the end of line
.+              # this one matches those 8 characters

入力から、これらにも一致する必要があります(改行で一致をチェックしてこのエンジンを試してください):

12345678
abcdefgh
于 2013-04-24T01:36:56.407 に答える