繁体   English   中英

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

[英]How to check if the string matches a regex

我正在学习正则表达式,使用:

我有明确的信息,并且在教程中愉快地运行,直到我踢石头:

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字符串"(?-mix:^[0-9][az]$)" ,这与"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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM