【応用情報技術者試験】量指定子

量指定子(りょうしていし)は、正規表現において直前の文字やパターンが「何回繰り返すか」を指定するメタ文字です。例えば、a の直後に * を付けると「0回以上」を意味し、+ を付けると「1回以上」を意味します。波括弧 {n,m} を使うと、特定の回数(例: \d{3} は3桁の数字)や回数の範囲(例: \d{3,5} は3桁から5桁の数字)を指定することも可能です。

主な量指定子の種類と意味

  • * (アスタリスク):直前の要素が0回以上繰り返されることを指定します。
    • 例: a* は「”” (空文字)」、「a」、「aa」、「aaa」などにマッチします。
  • + (プラス記号):直前の要素が1回以上繰り返されることを指定します。
    • 例: a+ は「a」、「aa」、「aaa」などにマッチします。
  • ? (疑問符):直前の要素が0回または1回繰り返されることを指定します。
    • 例: a? は「”” (空文字)」または「a」にマッチします。
  • {n} (波括弧 n):直前の要素がちょうど n 回繰り返されることを指定します。
    • 例: \d{5} はちょうど5桁の数字にマッチします。
  • {n,} (波括弧 n,):直前の要素がn回以上繰り返されることを指定します。
    • 例: \d{3,} は3桁以上の数字にマッチします。
  • {n,m} (波括弧 n, m):直前の要素がn回以上、m回以下の範囲で繰り返されることを指定します。
    • 例: \d{3,5} は3桁から5桁の数字にマッチします。

「貪欲 (greedy)」と「最短 (lazy)」

量指定子はデフォルトでは「貪欲 (greedy)」で、マッチ可能な最長の文字列と一致しようとします。しかし、量指定子の直後に疑問符 ? を付けることで「最短 (lazy)」にすることができ、マッチ可能な最短の文字列と一致するようになります。

  • 例1 (貪欲): <div>.*</div> は <div> と </div> の間のすべてのテキスト(最も長い範囲)にマッチします。
  • 例2 (最短): <div>.*?</div> は、最初に見つかった </div> まで(最も短い範囲)にマッチします。

コメント