正規表現

その前にマッチ演算子

while (<STDIN>) {
  if (/Hello/) {
    print;
  }
}

ここで、

/Hello/

のところをマッチ演算子と言う。
defalutでは変数$_に適用され、この場合では変数$_にHelloが含まれていれば、真を返し、そのときの変数$_を出力します。

/Hello$/

『$』はこのように使える。
『Helloで終わる文字列』というパターンになる。

/^Hello/

『^』はこのように使える。
『Helloで始まる文字列』というパターンになる。

/[0123456789]/

これで、0〜9までのどれか1文字にマッチすることになります。
/[0-9]/というように、『-』を使って書くこともできます。
また、\dとも書ける。

/[^0-9]/

『0〜9までの数字以外の1文字』というパターンになる。
[ ]の中で『^』を使うと、意味が違ってくるので注意。
また、Perlには[^0-9]と等価な\Dが用意されているので、それを使っても良い。

ホワイトスペース \s

\sは半角スペース、タブ文字などの画面には表示されない文字であるホワイトスペースにマッチすることになります。
ホワイトスペース以外にマッチする\Sもあります。

単語境界 \b

単語境界って言われても、よく分からないので。説明してみます。
マッチ演算子を以下のようにした場合、

/hello/
hello
hellos
shellos

これらにすべて、マッチしてしまいます。

hello

だけにマッチさせたいと思ったら、

/\bhello\b/

と、helloを\bで囲んで、マッチ演算子を変更します。



繰り返しについて

A*

*は0回以上の繰り返しを表します。

A+

+は1回以上の繰り返しを表します。

A?

?は0回か1回の繰り返しを表します。

A{3}

繰り返しの設定に{}を使うことができます。
A{3}で3回の繰り返しを表します。AAAと同様です。

A{1,}で1回以上の繰り返しを表します。A+と同様です。
A{1,3}で1回以上3回以下の繰り返しを表します。


グループ化
()を使って、グループ化できます。

ye(ah)+

これは、以下のような文字列にマッチします。

yeah
yeahah
yeahahah


選択

を使って、マッチさせるものを選択できます。
good|bad

これは、goodかbadにマッチします。


グループ化と選択の合わせ技

sleep(s|ing)

これは、sleepsかsleepingにマッチします。

mi(su|ni){1,3}

これは、以下のような文字列にマッチする。

misu
misusu
misususu
mini
minini
mininini
misuni
misunini
.
.


エスケープ
正規表現に関係のある特殊文字にマッチさせたい場合は\を使って、エスケープします。
\という文字にマッチさせたい場合、

\\