2000-06-02から1日間の記事一覧

n番めのマッチを見つける

# マッチするものの配列を作って,n番目を取り出す a = 'blue green red grern white'.scan(/\w+/) p "third color is #{a[2]}." if a.size>=2 # ループさせて,n番目にきたら処理する c = 0 'blue green red grern white'.gsub(/\w+/) { |x| c+=1; p "third…

正規表現にコメントをつける

p 'v1 = (6+5)*2; v2 = p->x;'.scan(/ [\w\.]+ # 英数字にマッチ | -> # アロー演算子(2文字以上の記号) | [^\s] # 1文字の記号 /x) 最後にxをつけると,正規表現中の空白が無視される.

単語にマッチさせる

p 'Seventh Avenue/Adam Clayton Powell Jr. Boulevard'.scan(/\w+/) #=> [["Seventh"], ["Avenue"], ["Adam"], ["Clayton"], ["Powell"], ["Jr"], ["Boulevard"]] '単語'という概念がアプリによって変わるので,単語とは何か?によって当然,正規表現も変わ…

文字にマッチさせる

r = /\A[A-Za-z]+\z/ p ['ABC' =~ r, 'ABC?' =~ r, '123' =~ r, '日本語' =~ r] #=> [0, nil, nil, nil] r = /\A[^\W\d_]+\z/ p ['ABC' =~ r, 'ABC?' =~ r, '123' =~ r, '日本語' =~ r] #=> [0, nil, nil, 0] 通常は前者で十分だけれど,特殊な文字(日本語と…

コピーと置換を同時に行ないたい

s1 = 'this is huge?' s2 = s1.sub(/this/, 'that') p s1 #=> "this is huge?" p s2 #=> "that is huge?" s3 = 'this is huge?' p s3.sub!(/this/, 'that') #=> "that is huge?" p s3.sub!(/this/, 'that') #=> nil 直接,対象の文字列を置換したい場合は,s…