2011年4月12日火曜日

正規表現

Perlには、組み込まれている専用の特殊言語によって記述された小さなプログラムをもっています。これを正規表現といいます。正規表現 (regular expression) は、高速で柔軟で信頼性の高い文字列処理を行います。Perlでは、正規表現のことをしばしばパターンと呼びます。その結果はTrue(マッチする)か、False(マッチしない)のいずれかになります。

単純なマッチ
$_の内容に対して、正規表現をマッチさせるには、スラッシュで囲んで指定します。

$_ = "Taichi Shindo";
if (/aich/) {
print "It matched.\n";
}

/で囲まれた文字列を、$_の中から探し、見つかれば真の値を返します。



ワイルドカード文字
ドット( . )はワイルドカード文字です。改行文字を除いたあらゆる文字1個にマッチします。

例)/ab.cd/
        abbcd, ab=cd, ab.cd の全てにマッチします。


量指定子
パターンの中で何かを繰り返したいときにつかいます。
■アスタリスク(*)は直前に置かれたものに0回以上マッチすることを表します

■プラス記号(+)は直前に置かれたものに1回以上マッチすることを表します

■クエスチョン記号(?)は直前に置かれたものが0回もしくは1回現れるのどちらかです。
        例)/ab-?cd/
                ab-cd, abcd のいずれかを含む文字列にマッチする

■ブレース( { } )は、繰り返し回数の最小と最大を表す2つの数字をコンマで区切って並べる。
        例)/a{2, 4}/
                aa, aaa, aaaa のいずれかを含む文字列にマッチする


選択肢
縦棒( | )は、その左側か右側のどちらか一方にマッチすることを表します。
例)/abc | def | ghi/
        abc, def, ghi のどれかを含む文字列にマッチします


文字クラス
文字クラスは、ブラケット( [ ] )の間に文字を並べ、その文字のどれか1個にマッチする場合、Trueを返します。
例)/[abc]/
        a, b, c のどれかの文字のを含む文字列にマッチする

■ハイフン ( - ) を使って文字の範囲を指定する
ハイフン( - )を使って文字の範囲を指定することができます。
例)/[a-zA-Z]/
        アルファベットの大文字・小文字合わせて52文字のどれかに含む文字列にマッチする

■文字クラスのショートカット
よく使われる文字クラスについてはショートカットが用意されています。
\d        数字にマッチする [0-9] と同じ意味
\w        全ての文字 [a-zA-Z0-9_]と同じ意味
\s        空白文字 [ \f\t\n\r ] と同じ意味(フォームフィード、タブ、改行文字、復帰文字)


アンカー
正規表現では、文字列の特定の場所に固定するために、アンカーが用意されています。
■キャレットアンカー( ^ ): 文字列の先頭を表す
        例)/^abc/
                文字列の先頭にある abc を含む文字列にマッチする

■ドル記号アンカー( $ ): 文字列の末尾を表す
        例) /abc$/
                文字列の末尾にある abc を含む文字列にマッチする

*よく使われるパターンに空白文字にマッチを表す、/^\s*$/ があります

■ワードアンカー( \b ) : ワードの両側にマッチします
        例)/\babc\b/
                abc の文字列にマッチする       
                abcd, zabc などの文字列にはマッチしない


後方参照
カッコで囲むことによって、パターンを正規表現エンジンに記憶させることができます。これによって、後方参照を実現することができます。

例)/(.)\1/
        任意の1文字にマッチして、その後ろに同じ文字がもう1個続くものにマッチする
        abccd, abb などを含む文字列にマッチする

0 件のコメント:

コメントを投稿