【Ruby】正規表現
とうとう、読み始めました。
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 356回
- この商品を含むブログ (124件) を見る
ここまでの言語の勉強経緯
パーフェクトRuby⇒初めてのRuby⇒パーフェクトJava⇒プログラミング言語Ruby
1章のコードがやば美しい
やばいよ!
若干20ページ目にしてこのコード・・・。
早速自分でも書いてみて学ぶぞ、と思ったら、そもそも
正規表現をあんまり使いこなせてない
ということで、
正規表現の勉強をしていた。
このサイトがすごく良かったよ!
Ruby 正規表現入門ドリルEngineer Flies - エンジニアは空を飛ぶ
以下、気付いたことなど。
記号^ の扱い
「^」は、文字クラス(ブラケットで囲まれた範囲)で使う場合は否定。
それ以外は先頭。
なるほど。
正規表現の情報をグローバル変数$で取得する
後方参照の情報も$~で取得できる
グループ(詳細下記)を使用している場合、
MatchDataオブジェクト情報に 当該グループにマッチした情報が保存される。
"ab@example.com " =~ /(\w+)@(\w+).com/ p [$`, $&, $', $~] ⇒ ["", "ab@example.com", " ", #<MatchData "ab@example.com" 1:"ab" 2:"example">]
欲張り・無欲 一致
orig_str = "<b>aaa</b> and <b>bbb</b>" p orig_str.gsub(/<b>(.*)<\/b>/, '<em>\1</em>') p [$`, $&, $', $~] p orig_str.gsub(/<b>(.*?)<\/b>/, '<em>\1</em>') p [$`, $&, $', $~]
■実行結果
"<em>aaa</b> and <b>bbb</em>" ["", "<b>aaa</b> and <b>bbb</b>", "", #<MatchData "<b>aaa</b> and <b>bbb</b>" 1:"aaa</b> and <b>bbb">] "<em>aaa</em> and <em>bbb</em>" ["<b>aaa</b> and ", "<b>bbb</b>", "", #<MatchData "<b>bbb</b>" 1:"bbb">]
グループ
()で括る。
当てはまる箇所が 正規表現に置き換わってしまう。
p "abbcbcc".scan /(b)+/ #<= [["b"], ["b"]] p "abbcbcc".scan /b+/ #<= [["bb"], ["b"]]
イメージとしては、正規表現自体のキャプチャ、ということか。
p "abbcbcc".gsub(/b+/, "b") #<= "abcbcc"
みたいな。
p /(a|b)+c/ =~ "sbabc" p [$`, $&, $', $~] p "sbabc".scan(/(a|b)+c/)
■実行結果
1 ["s", "babc", "", #<MatchData "babc" 1:"b">] [["b"]]
検索結果を記憶しない
p /(foo)\s(bar)\s(?=baz)/.match "foo bar baz" ⇒ #<MatchData "foo bar " 1:"foo" 2:"bar">
ふむ、、