Rubyで正規表現にマッチする文字列かどうかを判定する方法はいくつかある。
str = 'foo'
# String#=~、Regexp#=~。マッチした位置かnilを返す
str =~ /o/ #=> 1
/o/ =~ str #=> 1
# String#match、Regexp#match。MatchDataかnilを返す
str.match /o/ #=> <MatchData "o">
/o/.match str #=> <MatchData "o">
# Regexp#===。trueかfalseを返す
/o/ === str #=> true
単にマッチするかどうかを判定したいだけならRegexp#===
を使いましょうってパーフェクトRubyに書いてあったので、その場合はRegexp#===
を使えばいいと思うけど、=~
やmatch
と違って===
は右辺と左辺が変わると結果が変わるので注意が必要。
/o/ === str #=> true
str === /o/ #=> false
String#===
は正規表現のマッチングじゃなくて文字列の比較になっちゃうからだね。