正規表現
その前にマッチ演算子
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 . .
エスケープ
正規表現に関係のある特殊文字にマッチさせたい場合は\を使って、エスケープします。
\という文字にマッチさせたい場合、
\\