貪欲マッチ

「貪欲マッチ」(greedy matching)は、正規表現や文字列のパターンマッチングに関連する用語です。貪欲マッチは、パターンができるだけ長い文字列を一致させる傾向があるアルゴリズムのことを指します。

正規表現などでパターンを検索する際、デフォルトの動作は通常、できるだけ多くの文字をマッチさせようとする貪欲マッチングです。具体的には、正規表現がマッチングを試みる際、パターンの一致部分を最長にするように努力します。

例えば、次の正規表現パターン <.*> を考えてみましょう。このパターンは、< で始まり、> で終わる任意の文字列をマッチさせることを意味します。この場合、貪欲マッチが適用されると、以下の文字列の一部をマッチングします。

html
<p>これは<strong>重要な</strong>情報です。</p>

貪欲マッチに従った場合、この正規表現は <p>これは<strong>重要な</strong> という部分全体を一つのマッチとして返す可能性があります。これは、文字列全体をマッチさせるよりも長い部分が選ばれていることを示しています。

一方、「非貪欲マッチ」(non-greedy matching)または「最小一致」(minimal matching)は、できるだけ短い一致を選択し、マッチを制限する方法です。非貪欲マッチは、通常、? クオンティファイアを正規表現パターンの後に追加することによって実珸されます。

html
<p>これは<strong>重要な</strong>情報です。</p>

上記の例で非貪欲マッチを使用する場合、正規表現は以下のように動作し、最短の一致を返します。

  • <p> に一致
  • <strong> に一致
  • </strong> に一致
  • </p> に一致

貪欲マッチと非貪欲マッチの選択は、特定のパターンマッチングのニーズに依存します。文脈によって、どちらかを使うべきかが異なります。