我正在学习正则表达式,使用:
我掌握了明确的信息,并且很高兴在教程中运行,直到我踢了结石:
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
有人可以解释为什么最后一个错误吗?
===
是包含运算符,在其中big_concept === specific_concept
测试是否big_concept
包含specific_concept
。对于正则表达式,您要测试正则表达式描述的字符串类是否包含特定的字符串。所以你会写的rule === "1t"
。有关用法,请参见RegExp#===
。
"1t" === rule
测试字符串是否"1t"
包含正则表达式;但字符串仅包含(按照Ruby的规则)与字符串化(带有to_s
)时与字符串相同的对象。rule
stringifies到"(?-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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句