[ruby]コソコソ勉強
基礎が全然わかってないのを思い知ったので、rubyをまじめに勉強することにした。ので「たのしいruby」帰りに買ってきた。読み始め。
正規表現編
表現の内容自体はほとんど他の言語といっしょ。最短マッチも *?, +?でおんなじ。あ、そか。なかの人はst.cだものね。
マッチング
p.259によると 「/正規表現/ =~ "文字列"」の順が正しいのかな? (脳内perl皮質から警報が出てる)
>> re = /some/ => /some/ >> re.class => Regexp >> str = "truely some string" => "truely some string" >> str =~ re => 7 >> re =~ str => 7 >> re === str => true >> str === re => false
逆でも良いのか。関係だからsymmetricなだけかな。よくわかんない。
quoteメソッド
メタ殺し。かえって面倒くさい。brainf*ck全開!みたいなもの扱わない限り、あんまり使わなさそう。
>> qt = Regexp.quote("abc*def") => "abc\\*def" >> re = Regexp.new(qt) => /abc\*def/ >> re === "hogeabc*def" => true
オプション
定数は本当に3つだけなのか。なんで他は定義してないんだろう?
>> Regexp.constants => ["IGNORECASE", "MULTILINE", "EXTENDED"]
全部?
s,e,u,n | sjis, euc, utf8, bytes |
i | IGNORECASE |
x | 正規表現中の空白およびコメントを無視 |
m | MULTILINE |
o | EXTENDED (memoize) |
後方参照
これも普通か。$1, $2,...に入ってる。正規表現上では \1, \2...。あとマッチ文字列と前後は $`, $&, $'。クォートとバッククォートってパッと見でわからないのでいやだな。そのためだけに Englishってのも嫌だし・・・
Englishの場合は $PREMATCH, $MATCH, $POSTMATCH。
>> def pick(re, st) >> p re === st >> puts $` +"[" + $& + "]" + $' >> end => nil >> pick(/wooley/, "whoisbehindthisstringiswooleyherebutyoumaynotnoticeme") true whoisbehindthisstringis[wooley]herebutyoumaynotnoticeme => nil