如何检查字符串是否与正则表达式匹配

时间:2019-11-25 04:00:59

标签: regex ruby

我正在使用以下方法学习正则表达式:

我掌握了明确的信息,并且在使用教程之前一直很开心,直到我踢了石头:

rule = /^[0-9][a-z]$/

puts "rb -------------------------"
p "rb".match? rule #=> false
p !!("rb" =~ rule) #=> false
p "rb" === rule #=> false

puts "1t -------------------------"
p "1t".match? rule #=> true
p !!("1t" =~ rule) #=> true
p "1t" === rule #=> false 

有人可以解释为什么最后一个错误吗?

1 个答案:

答案 0 :(得分:5)

===是包含运算符,其中big_concept === specific_concept测试big_concept是否包含specific_concept。对于正则表达式,您要测试正则表达式描述的字符串类是否包含特定的字符串。因此您可以将其写为rule === "1t"。在RegExp#===中对此用法进行了说明。

"1t" === rule测试字符串"1t"是否包含正则表达式;但字符串仅包含(按照Ruby的规则)与字符串化(使用to_s)时与字符串相同的对象。 rule字符串化为"(?-mix:^[0-9][a-z]$)",它不同于"1t",因此也就是false。在String#===中对此用法进行了说明。

这样,这是您的代码,已更正(并扩展了:D):

rule = /^[0-9][a-z]$/

puts "rb -------------------------"
p "rb".match? rule #=> false
p !!("rb".match? rule) #=> false
p !!("rb" =~ rule) #=> false
p !("rb" !~ rule) #=> false
p rule === "rb" #=> false
p !!("rb"[rule]) #=> false
p rule.match? "rb" #=> false
p !!(rule.match "rb") #=> false

puts "1t -------------------------"
p "1t".match? rule #=> true
p !!("1t".match rule) #=> true
p !!("1t" =~ rule) #=> true
p !("1t" !~ rule) #=> true
p rule === "1t" #=> true
p !!("1t"[rule]) #=> true
p rule.match? "1t" #=> true
p !!(rule.match "1t") #=> true