この記事では、直前の文字の0回以上の繰り返しを表すメタ文字である *(アスタリスク) について説明します。
*
直前の文字の0回以上の繰り返しとは、言葉の通り、1つ前の文字の繰り返しのことです。 ただし、0回以上というのが重要であり、かつ、わかりにくい点でもあります。
なお、この記事でも以下のテキストを例に操作を説明します。
- hello 2014
- vi editor
- vi editor.
- vi editor
- vim Editor
- Vim Editor
- a
- aa
- aaa
- aaaa
- aaaaa
- .
- *
- ^
- $
- /
- \
- [
- ]
- <
- >
- {
- }
正規表現では、*(アスタリスク) は直前の文字の0回以上の繰り返しを表します。
重要なのは、『1回以上の繰り返し』ではなく『0回以上の繰り返し』であるという点です。 『0回以上の繰り返し』とは、つまり、直前の文字が存在しなくても一致するということです。
例えば、
a*
という正規表現は、"a" に一致するのは当然ですが、"b" にも "1" にも "あ" にも "ア" にも "亜" にも一致します。
では、実際に *(アスタリスク) を含めたテキスト検索を実施してみましょう。
上図のように文字カーソルは文書の先頭にあると仮定して説明を始めます。
まずは、"vi" で始まり "m" が0回以上繰り返す文字を検索してみましょう。
では、キーボードから /vim*<Enter> を入力してください。
/vim*<Enter>
上図のように文字カーソルが2行目の "vi" の位置に移動します。
検索テキストは、"vim*" と入力しましたが、検索されたのは "vi editor" の行です。 "m" が含まれていない行であるにも関わらず検索に一致しました。
検索に一致した理由は、*(アスタリスク) が0回以上の繰り返しを表しているからです。 つまり、"m" は含まれなていなくてもいいし、"m" のように1文字でもいいし、"mm" のように2文字でもいいということになります。
続いて *(アスタリスク) を使って文字 "a" の連続を検索してみましょう。
では、キーボードから /aa*<Enter> を入力してください。
/aa*<Enter>
上図のように文字カーソルが8行目の "a" の位置に移動します。
さらに、順方向の次の一致へ移動してみましょう。
キーボードから n を入力してください。
n
上図のように文字カーソルが9行目の "aa" の位置に移動します。
さらに、順方向の次の一致へ移動します。
キーボードから n を入力してください。
n
上図のように文字カーソルが10行目の "aaa" の位置に移動します。
このように、文字の連続を探すことができます。