Skip to content
Go back

正規表現:繰り返し

  • 数量子Quantifiersは直前のパターンが繰り返される部分にマッチする正規表現
    • *は0回以上
    • +は1回以上
    • ?は0回か1回
    • {n}はちょうどn回
    • {n,}は少なくともn回
    • {n,m}はn回以上、m回以下
  • 数量子の挙動にはgreedynon-greedyの2種類がある
    • greedyは既定の挙動で、できるだけ多くの文字とマッチしようとする
      • 例えば、<.*><a></a>に対して<a></a>全体にマッチする
    • 数量子に?を付けるとnon-greedyになり、最初のマッチで停止するようになる
      • 例えば、<.*?><a></a>に対して<a>(と</a>)にマッチする
      • この?は「0回か1回」の?とは別物
  • これらを使って、特定の中身を持つ括弧にマッチさせようとする場合、意図した通りにならない場合がある
    • 別の括弧のペアとマッチしてしまう場合がある
      • 例えば、"(ab.*cd)"(abc) (abcd) (bcd)に対して(abc) (abcd) (bcd)全体にマッチする
      • 例えば、(ab.*?cd)"(abc) (abcd) (bcd)に対して(abc) (abcd)にマッチする
    • この場合、区切り文字が中身に現れないことを明示する必要がある
      • "(ab[^)]*cd)"とすれば、(abc) (abcd) (bcd)に対して(abcd)にマッチする
        • [^xyz]と書くと、xyz以外の1文字とマッチする

参考文献#