我如何检查字符串中是否存在单词,如果不存在则返回false,在ruby中?

时间:2011-04-04 13:13:34

标签: ruby regex string substring

说我有一个字符串str = "Things to do: eat and sleep."

如何检查str中是否存在"do: ",不区分大小写?

5 个答案:

答案 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

或者关于正则表达式: http://www.regular-expressions.info/ruby.html