量を指定するメタ文字1
多くの場合、前の章で学んだ文字の指定はそのままでは使用しません。文字指定は基本的に1個の文字ごとにしか指定できないからです。そのため、この章で学ぶ量指定とセットで使用します。
文字の繰り返しを表すメタ文字
○* |
---|
意味:○の0回以上の繰り返し |
「*」(アスタリスク)は直前の文字が0回以上繰り返されるもの、全くないか、またはいくつかあるかを指定するメタ文字です。このままではわかりにくいので、下のような例を考えてみましょう。
bo*m |
---|
この正規表現で*はoにかかっています。この正規表現にマッチするのは次のような単語です。
bm |
bom |
boom |
booooooom |
oは0個以上の繰り返しです。つまりbmのようにoが無くてもマッチします。また、いくつあってもよいので、bomもboooooomもマッチします。
このメタ文字が威力を発揮するのは、「データがある時もないときもマッチさせる時」です。たとえば個人情報や履歴書などによくある資格の欄で、
資格:.* |
---|
と書くと、資格のある人は.の繰り返しでマッチします。また、資格が無く空欄の人も.の0回の繰り返し、つまり何もないためマッチします。
また、量指定の正規表現はグループ化を行うことでより便利に使えます。さきほどのbomの例で言うと、bo*mの正規表現はbmやbooomはマッチさせることができますが、bobomやbobobobomという単語にはマッチさせることができません。そこで、「()」を使用してグループ化を行います。
(bo)*m |
---|
こう表記すると、boがひとまとまりとして認識され、「boの0回以上の繰り返し」という意味になります。ただし、boが無くてもいいという意味なので、単なる「m」にもマッチします。また、(bo)*と書くと、空文字にもマッチしてしまうので注意が必要です。
○+ |
---|
意味:○の1回以上の繰り返し |
「+」(プラス)は直前の文字が1回以上繰り返されるものを指定するメタ文字です。
bo+m |
---|
こう書くと、oが1個以上あるものを探し出すことができます。
bom |
boom |
booooooom |
今回は少なくともoが1個は無くてはならないため、bmという単語はマッチしません。
○? |
---|
意味:○が0回または1回あること |
「?」(クエスチョンマーク)は直前の文字が0回または1回あることを示しています。たとえば、
cars? |
---|
と書くと、マッチする単語は
car |
cars |
となります。もちろん、()によるグループ化も行えるため、sun(ny)?と書けば、sunもsunnyもマッチさせることができます。