- Home ›
- Ruby正規表現の使い方 ›
- 複数の候補から選択 ›
- HERE
候補に他のメタ文字を使用
選択の中の候補自身も単なる文字列だけではなく他のメタ文字を使用することが出来ます。
具体的な例で考えて見ます。
/(add_.+¥(|delete_.+¥()/
選択の候補として「add_.+¥(」と「delete_.+¥(」が指定されていますので、いずれかに一致する場合に正規表現はマッチします。(候補の文字列の中に「(」が含まれていますが、この文字はエスケープが必要なので「¥(」と記述しています)。
「add_.+¥(」の中の「.+」は任意の一文字である「.」が1回以上繰り返されるということなりますので、「add_」で始まり「(」で終わる文字列全てにマッチします。同じように「delete_.+¥(」は「delete_」で始まり「(」で終わる文字列全てにマッチします。
マッチするもの:
add_display(var, var2) delete_prev_code(str)
このように候補自身も単なる文字列だけではなく他のメタ文字などを組み合わせて記述することが可能です。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" def check(str) if /(add_.+¥(|delete_.+¥()/ =~ str then print(Kconv.tosjis("○") + str + "¥n") else print(Kconv.tosjis("×") + str + "¥n") end end print(Kconv.tosjis("(add_.+¥(|delete_.+¥() にマッチするかどうか¥n¥n")) check("add_display(var, var2)") check("delete_prev_code(str)") check("addBorder(pixcel)") check("delete_margin")
上記のプログラムを「test3-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
今回のように「.+」を使って任意の文字を1回以上繰り返す場合には、文字列のどの部分にマッチするかは注意が必要です。詳しくは「欲張りなマッチと控え目なマッチ(量指定子?)」を参照して下さい。
( Written by Tatsuo Ikura )