这是我的代码:
>> x = "apple spoon"
=> "apple spoon"
>> y = "spoon tree"
=> "spoon tree"
>> z = "apple tree"
=> "apple tree"
>> puts "match" if x.upcase.match("APPLE" && "SPOON" && "TREE")
=> nil
>> puts "match" if y.upcase.match("APPLE" && "SPOON" && "TREE")
match
=> nil
>> puts "match" if z.upcase.match("APPLE" && "SPOON" && "TREE")
match
=> nil
Run Code Online (Sandbox Code Playgroud)
我期望发生的事情根本就是没有任何比赛.为什么我会在y和z上获得匹配?
正如dmarkow所说,&&运算符用于布尔运算,而不是为match()赋予多个参数.
如果您需要查找它是否与任何字符串匹配,请使用某种迭代器,例如:
puts "MATCH" if ["TREE","SPOON"].any? {|t| z.upcase.match(t)}
Run Code Online (Sandbox Code Playgroud)
另外,由于String#match接受正则表达式,我认为你可以做一个不区分大小写的正则表达式:
puts "MATCH" if ["TReE","SPoOn"].any? {|t| z.match(/#{t}/i)}
Run Code Online (Sandbox Code Playgroud)
或者你可以:
puts "MATCH" if z.match(/(tree|spoon)/i)
Run Code Online (Sandbox Code Playgroud)
既然你说你想匹配所有条款:
puts "MATCH" if ["TReE","SPoOn"].all? {|t| z.match(/#{t}/i)}
Run Code Online (Sandbox Code Playgroud)
如果正则表达式让您感到困惑,并且您希望首先进行大写:
puts "MATCH" if ["TREE","SPOON"].all? {|t| z.upcase.match(t)}
Run Code Online (Sandbox Code Playgroud)
一个&&声明或者返回假,或声明的最后一个值:
false && "SPOON"
# => false
"TREE" && "SPOON"
# => "SPOON"
Run Code Online (Sandbox Code Playgroud)
所以,你的陈述正在评估与此相同:
puts "match" if y.upcase.match("TREE")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |