ホームに戻る
関連 :
正規表現のススメ 先読み・後読み
目次 :

貪欲マッチと無欲マッチ

以下のようなテキストを考える。
Hello, <strong>Regexp</strong> !
<strong>を抽出しようとした場合、<.*>を指定しても期待通りの動作とはならない。 これは量指定子*が行末までを検索対象とする「貪欲マッチ」であることによる。 最初に検出された > で検索を止めたい場合は、*ではなく*?を用いるとよい(無欲マッチ)。 画像

貪欲・無欲に対応する量指定子

検索方法 貪欲 無欲 備考
0回以上の繰り返し * *? 処理系によっては *? は使用できない
1回以上の繰り返し + +?
0回または1回の出現 ? ??
n回以上の繰り返し {n,} {n,}?
n回以上m回以下の繰り返し {n,m} {n,m}?

注意が必要な点

貪欲・無欲の違いはマッチ終了位置にのみ表れ、マッチ開始位置には影響しない。このため以下のような動作となる。 画像