正規表現『*(アスタリスク)』の意味は?
正規表現『*』の意味について、解説します。
リファレンスなどを読むと『*』は
直前の文字の0回以上の繰り返しにマッチ
と書いてありますが、正直。
と思う人も多いでしょう。
ここでは実例を用いて説明したいと思います。
直前の文字の0回以上の繰り返し?
まずはリファレンスなどに書いてある。
『直前の文字の0回以上の繰り返しにマッチ』
これはいったい何でしょう?
そもそも正規表現とは
たくさんある文字の羅列の中から検索したい文字列を探すための技術
です。
『マッチする』というのは、
『検索したい文字を探せます』
ということを言っています。
では
『直前の文字の0回以上の繰り返し』とは何か?
これをもっと平坦に訳すと
- 『*』直前の文字を何回繰り返した文字列があっても探せます
- 『*』直前の文字が無くても(0文字でも)探せます
ということです。
1つ1つ分解してみます。
『*』直前の文字を何回繰り返した文字列があっても探せます
例えば検索する条件を
「正規*表現」
で検索すると「*」直前の文字が「規」なので、
たくさんある文字列の中から以下のような文字列を探し出すことができます。
- 「正規表現」
(直前の文字の1回の繰り返し) - 「正規規規表現」
(直前の文字の3回の繰り返し)
『*』直前の文字が無くても(0文字以上でも)探せます
また
『0回以上の繰り返し』
となっているので、直前の文字が無くても探せます。
先ほどの例で言うと
「正規*表現」
で検索すると「*」直前の文字が「規」なのですが、「規」がないものでも探せます。
つまりたくさんある文字列の中から
- 「正表現」
(直前の文字の0回の繰り返し)
を探し出すことができますよという意味です。
(補足)こんなケースは探せない
先ほどの例と同じく「正規*表現」で検索した場合、以下の文字列は探し出すことができません。
- 「表現」
(「正」の字がない) - 「制表現」
(「正」の字がない) - 「正気表現」
(「正」と「表現」の間に「気」が入っている)
は探し出すことはできません。
0回以上の繰り返しなので注意が必要
感のするどい人はわかると思いますが、『直前の文字の0回以上の繰り返し』なので、
例えば「規*」で検索したらどうなるでしょう?
答えは検索対象すべてを探し出してしまいます。
直前の「規」の文字があろうがなかろうが、探し出してしまうわけです。
実際「*」単体で使う機会は少ない
ここまで説明しましたが、
「*」単体では使う機会は少ないと思います。
「.」と合わせて使うことが多いと思います。
「.」の意味は「任意の1文字にマッチ」なので、
「.*」だと「任意の文字列」となります。
例えば「正.*表現」だと
- 「正規表現」
- 「正規規規表現」
- 「正木木木表現」
- 「正アイスクリーム食べたい表現」
- 「正規表現正規表現正規表現」
などを探し出せます。
また、この場合「世紀表現」は探し出せません。
関連記事
関連記事