top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_676

Ruby:◇正規表現:私の鬼門「正規表現」。ここでしっかりと学びたし ・・・ 【Ruby:23歩目】

 2009-02-03
第23歩
 ◇正規表現:基本とルール

  ※どんな言語でも必ず活用できますね、正規表現。
   ・(前回はこちら

  追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:220頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  ◇正規表現:基本とルール
  【ミッション】
 ●パターンとパターンマッチ概念のおさらい

 ●正規表現のルールの詳細


 ◆パターンを「正規表現」で表す・・・とは?
  (例)
abc【A】xyz

 というパターンがあって
 (・【A】は、1~7のいづれかの数字)

 これを、正規表現で表すとすれば
/abc[1-7]xyz/

 のようになる。

 ある文字列(str)の中に、上記のパターンが
 あるかどうかを調べるには、
str = "mojiretsuabc5xyzmojiretsu"
if str =~ /abc[1-7]xyz/
puts "#{$&}という文字がみつかりました。"
end
 という方法で可能だ。
 (この場合
  「abc5xyzという文字がみつかりました。」と出力)
  ・$& ・・・ パターンにマッチした文字が格納される


 ◆正規表現リテラル

  ●文字列を / で囲んで表記する
/abc/


  ●"." は、任意の1文字を表す(メタ文字)
/a.c/

   a の後に、任意の1文字があり、その後に c


 ◆パターンマッチ
  ※ある「正規表現」が文字列の中に含まれているか
   どうかを調べること
  (例)
str = "abcDEF"

 という文字列があったとき
 以下パターンマッチは

str =~ /a/

   ・マッチする
str =~ /a.c/

   ・マッチする
str =~ /cD/

   ・マッチする
str =~ /a...E/

   ・マッチする
str =~ /D../

   ・マッチする

str =~ /aE/

   ・マッチしない
str =~ /a.F/

   ・マッチしない
str =~ /CDEF/

   ・マッチしない
str =~ /.ab/

   ・マッチしない
str =~ /...a/

   ・マッチしない

  ●上記それぞれを、pメソッドに与えれば、
   位置を返してくる
   なければ、nil で(偽)
str = "abcDEF"
p str =~ /a/ #=> 0(true)
p str =~ /cD/ #=> 2(true)
p str =~ /.ab/ #=> nil(false)

   ※ここは、参照書籍と少し違う。参照書籍では
    これらの式は、true/false を返すとあったが(?)


 ◆正規表現のルール
  ※代表的なものを、整理

  ●[]
   ・この中に含まれている
    「いづれか」1文字
   ・並べていくつもして出来る
    ( [RrqQ] )
/[Rr]uby/

   ・"Ruby" や "ruby" であれば、マッチする
   ・"RRuby" も "rruby" も、マッチするが、
    "Rbuby" は、マッチしない

   ・- を利用して範囲設定も可能
    ( [b-e] )[bcde] と同じこと
    ( 数値の場合は、[1-7] などのように設定 )

   ・先頭に、^ を付けると、指定した文字"以外" の1文字
    ( [^b-e] )"bcde" 以外の1文字

   ・アルファベットと数字以外も指定可能だが
    - や ] / \ などは、\記号をその前に付加
    ※エスケープ処理
    ( "-+*/" のいづれか1文字にマッチ を調べる)
/[\-+*\/]/
    と、する
    ( "\" にマッチ を調べる)
/[\\]/
    と、する

  ●繰り返し
   ・任意箇所の繰り返しを指定するため
    メタ文字を利用する

   [ 1回以上の繰り返し ]
   ・+ ・・・ 直前のパターンが
         1回以上繰り返すことを意味する
/[me+taboy]/

    "b" が、1回以上繰り返すことを意味する
    metaboy や meeetaboy,meeeeeeeetaboy がマッチ

   [ 0回以上の繰り返し ]
   ・* ・・・ 直前のパターンが
         0回以上繰り返すことを意味する
/[me*taboy]/

    "b" が、0回以上繰り返すことを意味する
    metaboy や meeetaboy,meeeeeeeetaboy だけでなく
    mtaboy にもマッチ

   [ 0回 または 1回の繰り返し ]
   ・? ・・・ 直前のパターンが
         1回か、あるいは、無いか
/[me?taboy]/

    "b" が、0回以上繰り返すことを意味する
    metaboy や mtaboy にはマッチするが、
    meeetaboy,meeeeeeeetaboy にはマッチしない

   [ 任意回数の繰り返し ]
   ・{回数}・・・ 直前のパターンが回数繰り返す
/[me{3}taboy]/

    "e" が、3回繰り返すことを意味する
    meeetaboy にはマッチ
   ・{回数,}・・・ 直前のパターンが回数「以上」繰り返す
/[me{3,}taboy]/

   ・{a回数,b回数}・・・ 直前のパターンが
               a回「以上」、b回「以上」
/[me{3,5}taboy]/


  ●\A を使うと文字列の「先頭」にマッチかを調べる
  (例)
str = "metaboy"

 という文字列があったとき
str =~ /\Ameta/

   ・マッチする
str =~ /\Aeta/

   ・マッチしない

  ●\z を使うと文字列の「末尾」にマッチかを調べる
  (例)
str = "metaboy"

 という文字列があったとき
str =~ /boy\z/

   ・マッチする
str =~ /meta\z/

   ・マッチしない

  ●^ を使うと「行頭」にマッチかを調べる
  (例)
str = "meta\nboy"

 という文字列があったとき
str =~ /^boy/

   ・マッチする
str =~ /\Aboy/

   ・マッチしない

  ●$ を使うと「行末」にマッチかを調べる
  (例)
str = "meta\nboy"

 という文字列があったとき
str =~ /meta$/

   ・マッチする
str =~ /meta\z/

   ・マッチしない

  その他

  ●\d を使うと「数字」にマッチかを調べる
   [0-9] と同じこと
  ●\w を使うと「英数字」にマッチかを調べる
   [0-9A-Za-z_] と同じこと
  ●\s を使うと「空白文字」にマッチかを調べる
   [\t\n\r\f] と同じこと


+++++++++++++
PHPだと?
+++++++++++++
 ・言語の境界 を超えて
  ・実際には、対応している部分を詳細に調べる必要が
   あるけれど、基本は同じといえる。

 ちなみに、こちらに秀逸な
 「正規表現チェッカー」というツールがあり!
PHP正規表現チェッカー
PHP正規表現チェッカー Powerd by
 WEB SEEKER さん




奥深いので、今度じっくり復習すべし・・・

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/676-01793df2
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。