お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

関連サイト

: 個別エントリー・アーカイブ :

2007年1月 8日

Rubyの正規表現「 . (ピリオド or ドット)」

正規表現では あらゆるパターンを表現するために 特殊な記号や文字を駆使することになる。 それらの正規表現記号のことを「メタ文字」という。

最も基本的はメタ文字のひとつが「 . 」。「ピリオド」とか「ドット」とか呼ばれている。 Rubyマニュアルの 「正規表現」の 説明によると、「改行を除く任意の 1 文字にマッチします。」 とある。 簡単な正規表現ではあるが、 Rubyスクリプトによる例題を挙げてみる。

p "The quick brown fox" =~ /quick/   #=> 4
p Regexp.last_match[0]               #=> "quick"
まずは、メタ文字を使用していない例。 文字列「"The quick brown fox"」において 正規表現である「/quick/」 を 「=~」 によってマッチするかどうか判断している。 マッチしていたら、マッチしていた位置を 行頭を「0(ゼロ)」として数えた値を返す。 よって、この例では、「4」となるので それを 「p」メッソドで表示している。 「#」マークから右側はコメント。 「=>」は なくても構わないのだが、 Rubyの世界では実行結果を示す場合にはこのマークをつける慣例になっているようだ。 ここでもこの慣習に習ってつけている。 結果をコメントとして表示している。

2行目は「 Regexp.last_match[0] 」という変数を表示させている。 これは、最後に成功した正規表現のパターンマッチでマッチした文字列を表す変数(配列?)。 これを「 $& 」と書いても同じ結果になるのだが、 なれない人が見ると 何のことだか わかりずらいので ここでは あえて 「 Regexp.last_match[0] 」としてみた。

p "The quick brown fox" =~ /qu.ck/   #=> 4
p Regexp.last_match[0]               #=> "quick"
次の例では、任意の 1 文字にマッチする メタ文字「 . (ピリオド or ドット)」を 正規表現の中に使ってみた。 正規表現を「/qu.ck/」としたので、 これは、「qu」で始まり、どんな文字でもいいので1文字あって、 続けて「ck」で終わる5文字の文字列が存在するとマッチすることになる。 だから「quick」に限らず「quock」でも「quAck」でもマッチすることになる。

p "The quick brown fox" =~ /qu..ck/  #=> nil
p $&                                 #=> nil
今度は、マッチしない例。 「qu」で始まり、どんな文字でもいいので2文字あって、 続けて「ck」で終わる6文字の文字列は、 「"The quick brown fox"」中に見当たらないので 結果が「nil」となっている。 2行目で、 「 $& 」を使っているのは 「 Regexp.last_match[0] 」を用いると スクリプトがエラーで止まってしまうので、 ここでは「 $& 」の方を用いた。

p "The quick brown fox" =~ /q...k/  #=> 4
p $&                                #=> "quick"
この例でも、「q...k」が「quick」にマッチするのがわかる。

p "The quick brown fox" =~ /..i../  #=> 4
「..i..」も「quick」にマッチする。

このブログでは 自分自身と、それから 正規表現の勉強をこれからはじめる人の参考になるように、 出来るだけ丁寧に説明をつけてみた。 これから、少しずつ メタ文字を増やしていって、 正規表現の実験スクリプト例をどんどんアップしていこうと思う。

【参考リンク】



カテゴリー: Ruby , 正規表現     2007年1月 8日 22:11

トラックバック

このエントリーのトラックバックURL:
http://www.skymerica.com/blog/yotsumoto/mt/mt-tb.cgi/673


コメント

コメントしてください




保存しますか?


 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2009 Skymerica Corp. All rights reserved.