記事の要約
- 「*」は直前の文字を0回以上繰り返し
- 「\*」で単純に文字としてのアスタリスクを表現
- 「*?」で最短一致
「*」は直前の文字を0回以上繰り返し
正規表現における「*(アスタリスク)」は直前の文字を0回以上繰り返しという意味を持ちます。「あ*」と書いてあれば「」「あ」「ああああ」のいずれにもあてはまります。また、特殊な文字や省略記法に対しても「*」は有効です。
// 1を0回以上繰り返す表現
1*
// ヒットする文字列
(空欄)
1
111
111111111111111
// 数字を0回以上繰り返す表現
\d*
// ヒットする文字列
(空欄)
2
345
0987654321
(参考)「+」「?」「{}」も繰り返しの記号
「*」と同様に「+」「?」「{}」も繰り返しとしての意味を持ちます。
- 「+」は直前の文字を1回以上繰り返し
- 「?」は直前の文字を0回または1回
- 「{n}」は直前の文字をn回繰り返し
- 「{n,m}」は直前の文字をn回〜m回繰り返し
- 「{n,}」は直前の文字をn回以上繰り返し
- 「{,m}」は直前の文字をm回以下繰り返し
「\*」でエスケープ
「*」は正規表現内では特殊な意味をもってしまうため、たんに文字として「*」を表現したい場合にはエスケープという処理が必要です。正規表現ではエスケープするには「\(バックスラッシュ)」をつけて「\*」としましょう。
「*」は最長一致
「*」は直前の文字を0回以上繰り返しですが、厳密には「直前の文字を0回以上繰り返した結果一番長いパターンにヒットする」という処理をします。
// 対象
ピカチュウライチュウ
// 正規表現
(.*チュウ) // 最長一致なので「ピカチュウライチュウ」
(.*?チュウ) // 最短一致(後述)なので「ピカチュウ」「ライチュウ」
「*?」にすれば最短一致
もし対象のなかでもっとも短い場合にヒットさせたい場合には「*」を「*?」として、最短一致に変更する必要があります。なお「+」や「?」の場合も「+?」「??」とすることで同様に最短一致へと変更できます。
詳しくは次の記事で解説しています。