我有一个问题,我试图创建一个方法来查找字符串中的单词(或字符序列)并且不关心区分大小写。例如," ExAmPLE"和"示例"都会回归真实。这是我的代码
class WordMethods
# Finds words in a string and returns true or false
def word_finder?(string, word) # A boolean method that takes in one argument, word (a string)
return true if string.include?(word, /i/) # trying to use regex for case insensitive
end
word_finder?("A gold brown fox", "GoLD") # should return true
end
当我在irb上运行代码时,我收到以下错误。
NoMethodError: undefined method `word_finder?' for WordMethods:Class
我不明白。我在类中定义了我的方法,然后在类中调用它。我不知道自己哪里出错了。我是ruby的初学者,并练习了一些我在互联网上找到的示例问题。这是其中之一。
任何帮助将不胜感激
答案 0 :(得分:3)
您可以在Ruby中使用正则表达式来搜索字符串中的某些内容,并通过将i
添加到正则表达式的末尾来使您的搜索不区分大小写,如下所示:
"A gold brown fox" =~ /GoLD/i #=> 2
返回2
,这是匹配的索引。如果没有匹配,则返回nil
。这适用于布尔上下文,因为值2
的作用类似于" true"在Ruby中,而nil
充当" false。"当然,如果你真的希望它返回true
或false
,你可以在表达式前加!!
来强制它为布尔值:
!!("A gold brown fox" =~ /GoLD/i) #=> true
这种语法很简单,但是如果你想创建一个word_finder?
方法,你可以这样做:
class String
def word_finder?(word)
!!(self =~ Regexp.new(word, true))
end
end
"A gold brown fox".word_finder?("GoLD") #=> true
上述代码需要注意三点:
我们正在修补String类,添加word_finder?
方法。通过在字符串后添加.word_finder?
来调用此方法,并且字符串的值在函数中表示为self
。
通过Regexp.new(word, true)
创建Regexp模式会返回该字的不区分大小写的正则表达式。因此,在这种情况下,Regexp.new("GoLD", true)
评估为/GoLD/i
。
我们将self =~ Regexp.new(word, true)
括在!!( ... )
中,以便我们获得true
或false
,而不是匹配的索引或nil
。< / p>
参考:
http://www.regular-expressions.info/ruby.html
http://www.ruby-doc.org/core-2.1.1/Regexp.html#method-c-new
http://www.ruby-doc.org/core-2.1.2/String.html#method-i-3D-7E