正規表現:アスタリスク「*」の意味は?

最終更新:2022-07-21 by Joe

基本的な正規表現について、今回はアスタリスク「*」の意味についてです。

正規表現のアスタリスク「*」とは?

正規表現でアスタリスク「*」は、「直前のパターンの0回以上の繰り返し」という意味です。

最も簡単な正規表現の例は、

// a を0回以上繰り返す正規表現
abc*

この正規表現は、下記を全てマッチします。

ab                     // マッチ。「c」の0回の繰り返し
abc                    // マッチ。「c」の1回の繰り返し
abccccc                // マッチ。「c」の5回の繰り返し

アスタリスク「*」のような繰り返し回数を制御するメタ文字は、「量化子」「量指定子」などと呼ばれる事があります。

正規表現の量化子
アスタリスクを含め、正規表現には、下記のような量化子があります。

  • * —– 0回以上の繰り返し
  • ? —- 0回または1回の出現
  • + —- 1回以上の繰り返し
  • {n,m} —- n回〜m回の繰り返し

たまに、どれがどれだったのか、ど忘れしちゃうんだよね・・

アスタリスクは「最初の一致」「最長の一致」

アスタリスク「*」のような量化子では「最初に見つかる」「最長の一致」が優先的にマッチされます。

最初の一致

下記のアスタリスクを使ったパターン例では、最初に見つかった「〜の0回の繰り返し」、すなわち「空文字」が一番初めにマッチします。

// 正規表現
〜*

// テスト対象
あ〜〜〜!驚いた。


// 最初のマッチ
(空文字)

この空文字は、テスト対象文字列の「あ」から始まる文字列の吟味においてマッチします。「あ」から始まる文字列の吟味が終われば、その次に、「〜」から始まる文字列の吟味が開始されます。

「最初の一致」はあくまで「空文字」になります。(この2番目の吟味は「〜〜〜」をマッチします)

最長の一致

下記のアスタリスクを使ったパターン例では、「あ」ではなく、同時にマッチする最長の「あ〜〜〜」がマッチします。これは吟味の際には最も回数の多いマッチが優先される「Greedy (欲張りな)マッチ」と呼ばれるます。

// 正規表現
あ〜*

// テスト対象
あ〜〜〜!驚いた。


// 最初の最長のマッチ
あ〜〜〜

最初の一致・最長の一致は、知っておくべき、大切な仕様じゃな。

【参考】アスタリスクを使った「最短の一致」

アスタリスク「*」を始めとする、+, ?, {n, m} のような量化子では、その直後に「?」をつけると、最短の一致をマッチするようになります。

/ 正規表現
あ〜*?

// テスト対象
あ〜〜〜!驚いた。


// 最初の、最短のマッチ
あ

量化子の一覧です。

量指定子(最長一致)最短一致意味
**?直前のパターンの0回以上連続
++?直前のパターンの1回以上連続
???直前のパターンの0回か1回の出現
{N} - 直前のパターンのN回の連続
{min,}{min,}?直前のパターンのmin回以上の連続
{,max}{,max}?直前のパターンのmax回以下の連続
{min,max}{min,max}?直前のパターンのmin回からmax回の連続