【サルにもわかる正規表現入門】

その2

3.メタ文字の種類

 では、メタ文字を種類ごとに解説していきます。以下、具体例で示していきます。わかりやすくするため大きな文字を使用していますが、メタ文字はすべて半角です。
(1)とにかくなんでもいい1文字     .
半角の .を使用すると、とにかくなんでもいい1文字を表現することができます。
正  規  表  現   私は.です
検索できる文字列の例
  私はです   私はです  私は0です
つまり、下線の文字の部分がなんでもいいことになります。

「正規表現」の書きかたひとつで、「検索できる文字列の例」がすべて検索できるということです。

さらに、これを応用してみます。

正  規  表  現   私は.....
検索できる文字列の例
  私はうどん嫌い   私は早起き苦手
…と、 .を繋げることでいろんな表現が可能になるのがおわかりになるでしょう。
しかし、 . そのものを検索したい場合がありますね。例えば、TEST.LOG を検索したい場合などですね。この場合は、
正  規  表  現   TEST\.LOG
検索できる文字列の例   TEST.LOG
つまり、.の前に\を付けることで、.を正規表現の.ではなくて、単なるひとつの文字のとしての.という意味に変えることができるのです。

(2)行の先頭と最後  ^ $

 
行の先頭や最後にのみ存在する文字列を検索したい場合があります。
例1
 今日はありがとうございました。
例2  
 ありがとうと言いたい
例3
 君に心よりありがとう
これらの例に対して、
正  規  表  現
  ^ありがとう 
によって検索すると、合致するのは例2だけとなります。

つまり、半角の ^ は、行の先頭を意味します。ですから、この「正規表現」の場合は、行の先頭に存在する「ありがとう」の文字しか検索しないのです。

逆に、

正  規  表  現  
 ありがとう$ 
の場合は、 $ が行の終わりを意味します。この例では行の終わりにある「ありがとう」しか検索しません。ですので、合致するのは、例3だけとなります。

 また、以下のようにこの両方を同時に指定した場合、   

正  規  表  現
 ^ありがとう$ 
とすると、「ありがとう」の文字だけのある行に合致します。
なお、行頭にある普通の文字の ^ 、行末にある $ を検索したい場合は、それぞれ
 
正  規  表  現
 ^^ 
正  規  表  現
 $$  

として下さい。
これからもおわかりのように、^は正規表現の先頭、$は終端のものしかメタ文字として認識されません。

(3)同じ文字の繰り返し  * + ?

同じ文字の繰り返しを表す正規表現は、 *   +   ?   の3つあります。
正  規  表  現   おー*
検索できる文字列の例
 おい  おーーい  おーーーーい
この例からもわかりますように、 * は、* の直前の文字がないか、直前の文字が1個以上連続するという意味になります。

ここで注意して頂きたいのですが、ファイル名を指定する時のワイルドカードで使用される * とは、意味が異なります。

ワイルドカードの * では、「おー*い」は、

      おーい  おーーい  おーーーーい

などと同等の意味になります。

 すなわち、* は直前の文字がなんであろうと関係なく、「ー」の後の文字がまったくなくて「い」が来ているか、どんな文字でもいいから、1個以上の文字が「ー」の後に続いて、最後に「い」が来ているかが問題になります。
 

正  規  表  現   おー+
検索できる文字列の例
 おーい  おーーい  おーーーーい

+ の場合は、* とは違い、最低でも1個は + の直前の文字がないといけません。
後は、それが連続するという意味になります。
 

正  規  表  現   おー?
検索できる文字列の例
 おい  おーい 

? の場合は、直前の文字がまったくないか、1つだけあるという意味です。

これはどういう場合に便利かと言いますと、
 

正  規  表  現
 Windows? 
検索できる文字列の例
 Windows   Window

と言う風に、単数形と複数形のどちらでも合致させたい場合に利用できます。
 

正  規  表  現   Windows ?98
              ↑
半角のスペースがあります。
検索できる文字列の例
 Windows98   Windows 98

と言う風に、スペースがあるかどうか不明の文字列を検索する場合にも利用できます。

 *+? は、少しずつ違うので、その違いを理解して下さい。