正規表現の評価は「 =~ 」でもOK
正規表現を使うとき、「"ax" =~ /([a-z])x/」のように文字列を左辺、正規表現を右辺にしていたのだけど、逆にしても同じなんだな。あと、正規表現が左辺の場合、「===」でもマッチングがチェックできる。
# 文字列を左辺。 puts "ax" =~ /([a-z])x/ puts $1 # 正規表現を左辺。これは↑と同じ puts /([a-z])x/ =~ "bx" puts $1 # 正規表現を左辺にする場合「===」でもマッチするかどうかの評価が可能。 # ただし戻り値はtrue or false puts /([a-z])x/ === "cx" puts $1 # $1はちゃんと更新される。 # 文字列を左辺にしての「===」は意味が違うので注意な。 puts "dx" === /([abc])x/ puts $1
実行結果です。
0 a 0 b true c false c
Javaの「"hoge".equals( str )」的な効果があるかと一瞬思ったけど、そんなことはなかった。
def test( str ) str =~ /[a-z]x/ ? "a" : "b" end def test2( str ) /[a-z]x/ =~ str ? "a" : "b" end puts test( nil ) puts test2( nil )
実行結果です。
b b
NillClassでちゃんと「=~」が定義されているっぽいなー。ふむ。