ホーム>source

次の正規表現の違いは何ですか?

(\2amigo|(go!))+
(amigo|(go!))+

どちらも同じ文字列に一致します。 https://regexr.com/3u62t

前方参照はどのように機能しますか?

あなたの答え
  • 解決した方法 # 1

    実際にはまったく機能しません(WiktorStribiżewが指摘したように、他の正規表現フレーバーでも可能です)。

    \n の場合  何もキャプチャしていないキャプチャグループを指し、空の文字列と一致します。これは、たとえば /(a)?b\1/ 、これは b と一致します 。

    \n の場合  パターンの後半に表示されるキャプチャグループを指します。通常はまだ何もキャプチャできません。これは、たとえば /\1b(a)/ 、これは ba と一致します 。

    繰り返しの中で、以前のキャプチャが保持されていると考えるかもしれません。そのため、 /(\2a(b))*/   abbab と一致します 、それはそれがどのように機能するかではありません:繰り返しの中で、新しいマッチが始まると、キャプチャはリセットされます。代わりに abab と一致します 、じゃない  abbab

    その結果、前方参照は完全にまったく役に立たなくなり、空の文字列にのみ一致します。 2つのパターンに違いはありません。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - Flask-Appbuilderのボタンをページにリンクする