正規表現: 貪欲なパターンと非貪欲なパターン

通常のパターンには、貪欲マッチング、非貪欲マッチング、排他モードの 3 つのモードがあります。

これら 6 つのメタ文字のうち、{m,n} を使用して (*)(+)(?) の 3 つのメタ文字を表すことができます。

Greedy モードは、簡単に言えば、可能な限り最長のマッチです。非貪欲モードでは、可能な限り最短の一致が行われます。これら 2 つのパターンにより、異なるマッチング結果が生成されます。

貪欲なマッチング (Greedy)

正則化では、回数を表す量指定子はデフォルトで貪欲であり、貪欲モードでは、可能な最大長と一致しようとします。

貪欲でないマッチング (Lazy)

貪欲モードを非貪欲モードに変更するにはどうすればよいですか? 量指定子の後に英語の疑問符 (?) を追加すると、正規化は a*? になります。

 エクスクルーシブモード(ポゼッション)

グリーディ モードか非グリーディ モードかに関係なく、対応する機能を完了するにはバックトラックが必要です。ただし、一部のシナリオでは、バックトラッキングは必要なく、一致しない場合は失敗を返しても問題ありません。そのため、通常のパターンには排他モードという別のモードがあります。これは貪欲一致に似ていますが、バックトラッキングは発生しません。マッチングプロセス中に実行されるため、場合によってはパフォーマンスが向上することがあります。

排他モードは貪欲モードとよく似ています。排他モードはできるだけ多くのマッチングを行い、マッチングに失敗した場合はバックトラックせずに終了するため、時間を節約できます。具体的な方法は、量指定子の後にプラス記号 (+) を追加することです。

aaab 文字列と一致させるために a{1,3}+ab を使用すると、a{1,3}+ は最初の 3 つの a を使い果たし、バックトラックしないため、文字列には b だけが残ります。その結果、次のようになります。正規表現のプラス記号の後の a は、要件を満たすコンテンツと一致せず、一致は失敗します。貪欲パターンの場合は {1,3}、非貪欲パターンの場合は {1,3}? と一致します。

 正規表現の量指定子は、デフォルトでは貪欲なマッチングになります。非貪欲なマッチングを実行したい場合は、量指定子の後に疑問符を追加する必要があります。グリーディ マッチングと非グリーディ マッチングの両方でバックトラッキングが実行される場合があります。排他モードでもグリーディ マッチングは実行されますが、バックトラッキングは実行されません。そのため、シナリオによっては、マッチング効率を向上させることができます。排他モードが使用できるかどうかはクラス ライブラリによって異なります使用するプログラミング言語のサポート状況、排他モードが要求に応えられるかどうか。

この記事は 8 月の Day19 の学習ノートです。内容はGeek Timeの「正規表現入門コース」 からのもので、このコースが推奨されています。

Supongo que te gusta

Origin blog.csdn.net/key_3_feng/article/details/132384318
Recomendado
Clasificación