/abc/i みたいなオブジェクトをRegexp.newでやるにはどうするか調べたのでメモ
実装を見ずに調べたので、ちょっと意外な結果だった
参考サイト
- http://www.rubylife.jp/regexp/ini/index3.html
指定できるオプション
オプション | 効果 |
---|---|
/i | 大文字と小文字を区別せずにマッチを行う |
/x | パターンの中の空白やコメントを無視する |
/m | 複数行モード。メタ文字(.)が改行にもマッチする |
定数を使って指定
pry(main)> Regexp.new("abc", Regexp::IGNORECASE)
=> /abc/i
pry(main)> Regexp.new("abc", Regexp::MULTILINE)
=> /abc/m
pry(main)> Regexp.new("abc", Regexp::EXTENDED)
=> /abc/x
定数の中身はただのFixnum
pry(main)> Regexp::IGNORECASE
=> 1
pry(main)> Regexp::IGNORECASE.class
=> Fixnum
なので、こんな書き方もできる
pry(main)> Regexp.new("abc", 1)
=> /abc/i
pry(main)> Regexp.new("abc", 2)
=> /abc/x
pry(main)> Regexp.new("abc", 4)
=> /abc/m
複数オプションを指定する場合
真面目に書くならビット演算で
pry(main)> Regexp.new("abc", Regexp::IGNORECASE | Regexp::MULTILINE)
=> /abc/mi
各定数は立つビットが別々なのでこれでもいける
pry(main)> Regexp.new("abc", 3)
=> /abc/ix
pry(main)> Regexp.new("abc", 5)
=> /abc/mi
pry(main)> Regexp.new("abc", 6)
=> /abc/mx
pry(main)> Regexp.new("abc", 7)
=> /abc/mix
ここから余談
何気に上記以外の引数でもいける。nilでない場合はiオプションがつくもよう
詳しく調べる気はなかったのでほんとに余談
pry(main)> Regexp.new("abc", nil)
=> /abc/
pry(main)> Regexp.new("abc", {})
=> /abc/i
pry(main)> Regexp.new("abc", [1,2,3])
=> /abc/i
pry(main)> Regexp.new("abc", :a)
=> /abc/i
pry(main)> Regexp.new("abc", "m")
=> /abc/i