« 「すぐ分かるPerl」6.6 正規表現による検索 | トップページ | 「すぐ分かるPerl」7.1 置換処理 »

2008年5月12日 (月)

「すぐ分かるPerl」6.7 その他の正規表現

■文字クラス
[abc] aかbかcのどれか
[a-z] アルファベット任意の小文字
[^abc] aでもbでもcでもない文字
\d 数字(digit)
\D 数字以外
\w 英数字(word)
\W 英数字以外
\s 空白文字(space)
\S 空白文字以外
\b 単語境界(word boundary)
. 任意の一文字

単語境界とは、英数字と空白または文字列の端との間を意味する
/Jackson/ だと Jacksons にもマッチするが
/\bJackson\b/ だと「 Jackson 」という単語つまり前後に空白か文字列の端がある場合にしかマッチしない。

■繰り返し
文字、または文字クラスをxとしたばあい
x* 0回以上の繰り返し
x+ 1回以上の繰り返し。xx*と同じ
x? 0回か1回
x{5} 5回繰り返し。xxxxxと同じ。
x{3,} 3回以上繰り返し。xxx+と同じ
x{3,5} 3回以上5回以下繰り返し。xxxx?x?

このあたりはちょっと分からないというか、0回以上と1回以上とか、なんかわからん。

■グループと選択
文字列を繰り返すときは()をつかってグループ化する。

su(mo)+ sumo,sumomo,sumomomomoなどにマッチする。

いくつかのパターンのうち、どれかにマッチさせる場合には|を使う。

Love|kiss loveかkissにマッチする
stud(y|ies) studyかstudiesにマッチする
su(mi|mo){2,3} sumimi,sumimo,sumomi,sumomo,
        sumimomi,sumomimi,sumomomi,sumomomi,sumomomimo,sumimomo,sumomomoのいずれかにマッチ

■位置指定
パターンの位置を指定する
^ 先頭
$ 末尾

■エスケープ
/,^,\などの正規表現的に意味のある特殊記号自体を検索したい局面では、\でエスケープする。

^\^ ^で始まる行にマッチ
\\ \自体にマッチ

\は特殊記号の前ではエスケープという意味になるが、特殊記号でなければエスケープはされず書かないのと同じという意味合いになる。

/\o\)\+\>/

o)+>

という文字列にマッチする。
いちいち\を挟むのが面倒な場合には\Qと\Eの間に挿入される文字列を全部の前に\が挿入されるのと同じとして扱う事が出来る。

/\Qo)+>\E/

■iスイッチ
マッチ演算子の末尾にiをつけると、大文字小文字を無視する。ignore caseの略。

/hi/i

とした場合、これは

hi,Hi,hI,HIにマッチする。

■区切り文字を変えるm
区切り文字はスラッシュ出なくても良い。

m|パターン|

m#パターン#

と書いてもマッチ演算子化する事が可能。
mの直後の文字が区切り文字となる。

スラッシュ5個に一致、という条件を設定した場合には、\記号を使うとエスケープが必要となり
/\/\/\/\/\//
と記述しなくてはいけないが、区切り記号を「|」に変えることで、/をエスケープする必要がなくなり、

m|/////|

と記述できる(という認識でいいのだろうか・・・?)

|

« 「すぐ分かるPerl」6.6 正規表現による検索 | トップページ | 「すぐ分かるPerl」7.1 置換処理 »

Perl」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/214806/41178168

この記事へのトラックバック一覧です: 「すぐ分かるPerl」6.7 その他の正規表現:

« 「すぐ分かるPerl」6.6 正規表現による検索 | トップページ | 「すぐ分かるPerl」7.1 置換処理 »