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