说我有一个字符串str = "Things to do: eat and sleep."
如何检查str中是否存在"do: "
,不区分大小写?
答案 0 :(得分:20)
像这样:
puts "yes" if str =~ /do:/i
要返回布尔值(大概是从方法中),请将匹配结果与nil
进行比较:
def has_do(str)
(str =~ /do:/i) != nil
end
或者,如果您不喜欢!= nil
,那么您可以使用!~
代替=~
并取消结果:
def has_do(str)
not str !~ /do:/i
end
但我真的不喜欢双重否定......
答案 1 :(得分:4)
在ruby 1.9中你可以这样做:
str.downcase.match("do: ") do
puts "yes"
end
这不完全是你要求的,但我注意到对另一个答案的评论。如果你不介意在匹配字符串时使用正则表达式,也许有一种方法可以跳过downcase部分以获得不区分大小写。
有关详细信息,请参阅String#match
答案 2 :(得分:3)
你也可以这样做:
str.downcase.include? "Some string".downcase
答案 3 :(得分:2)
如果我正在寻找的是一个case =不敏感的子字符串匹配,我通常会使用:
str.downcase['do: ']
10次中有9次我不在乎比赛中的字符串在哪里,所以这很简洁。
以下是IRB的样子:
>> str = "Things to do: eat and sleep." #=> "Things to do: eat and sleep."
>> str.downcase['do: '] #=> "do: "
>> str.downcase['foobar'] #=> nil
因为如果没有命中它会返回nil
,它也会在条件句中起作用。
答案 4 :(得分:0)
"Things to do: eat and sleep.".index(/do: /i)
index返回匹配开始的位置,如果未找到则返回nil
您可以在此处详细了解索引方法: http://ruby-doc.org/core/classes/String.html