正規表現

正規表現で「*(アスタリスク)」は直前の文字を0回以上 | エスケープ

正規表現でのアスタリスクは0回以上繰り返し
記事の要約
  • 「*」は直前の文字を0回以上繰り返し
  • 「\*」で単純に文字としてのアスタリスクを表現
  • 「*?」で最短一致

「*」は直前の文字を0回以上繰り返し

正規表現における「*(アスタリスク)」は直前の文字を0回以上繰り返しという意味を持ちます。「あ*」と書いてあれば「」「あ」「ああああ」のいずれにもあてはまります。また、特殊な文字や省略記法に対しても「*」は有効です。

// 1を0回以上繰り返す表現
1*

// ヒットする文字列
(空欄)
1
111
111111111111111

// 数字を0回以上繰り返す表現
\d*

// ヒットする文字列
(空欄)
2
345
0987654321

(参考)「+」「?」「{}」も繰り返しの記号

「*」と同様に「+」「?」「{}」も繰り返しとしての意味を持ちます。

「\*」でエスケープ

「*」は正規表現内では特殊な意味をもってしまうため、たんに文字として「*」を表現したい場合にはエスケープという処理が必要です。正規表現ではエスケープするには「\(バックスラッシュ)」をつけて「\*」としましょう。

「*」は最長一致

「*」は直前の文字を0回以上繰り返しですが、厳密には「直前の文字を0回以上繰り返した結果一番長いパターンにヒットする」という処理をします。

// 対象
ピカチュウライチュウ

// 正規表現
(.*チュウ)  // 最長一致なので「ピカチュウライチュウ」
(.*?チュウ) // 最短一致(後述)なので「ピカチュウ」「ライチュウ」

「*?」にすれば最短一致

もし対象のなかでもっとも短い場合にヒットさせたい場合には「*」を「*?」として、最短一致に変更する必要があります。なお「+」や「?」の場合も「+?」「??」とすることで同様に最短一致へと変更できます。

詳しくは次の記事で解説しています。