我需要檢查給定的字符串是否包含字符串或正則表達式。如果是,它應該返回true,否則 - false。我該怎麼做?字符串包含另一個字符串或正則表達式(紅寶石)
我:
def method(string)
if @text.match(/#{string}/)
true
else
false
end
end
但我不知道這是否是一個正確的方法。
我需要檢查給定的字符串是否包含字符串或正則表達式。如果是,它應該返回true,否則 - false。我該怎麼做?字符串包含另一個字符串或正則表達式(紅寶石)
我:
def method(string)
if @text.match(/#{string}/)
true
else
false
end
end
但我不知道這是否是一個正確的方法。
考慮一下:
@text = 'foobar'
def method1(string)
if @text.match(/#{string}/)
true
else
false
end
end
這可以簡化爲:
def method2(string_or_regex)
if @text[string_or_regex]
true
else
false
end
end
字符串的[]
方法允許我們在一個字符串或圖案來傳遞。如果它是一個字符串,則該方法將其用於固定字符串/字符串內搜索。如果傳入一個模式,則返回匹配的文本。
但是,Ruby比這更友好。我們不必告訴它有條件地返回真實或錯誤的值。在Ruby中,nil或false
值被視爲false,其他任何內容都是「真實」的。我們可以將值轉換爲真/假使用!!
,這是雙布爾「不」:
true # => true
'foo' # => "foo"
false # => false
nil # => nil
!true # => false
!'foo' # => false
!false # => true
!nil # => true
!!true # => true
!!'foo' # => true
!!false # => false
!!nil # => false
知道了,而該字符串的[]
返回一個零如果沒有找到,或者匹配的文本,如果發現:
'foo'['foo'] # => "foo"
'foo'['bar'] # => nil
我們可以減少原來的方法:
def method3(string_or_regex)
[email protected][string_or_regex]
end
這裏發生了什麼測試每個方法上面:
method1('foo') # => true
method1('baz') # => false
method2('foo') # => true
method2(/foo/) # => true
method2('baz') # => false
method2(/baz/) # => false
method3('foo') # => true
method3(/foo/) # => true
method3('baz') # => false
method3(/baz/) # => false
你必須要小心插正則表達式對象到另一個正則表達式:
string = /foo/
/#{string/ # => /(?-mix:foo)/
的(?-mix:
是插入內的其他圖案的圖案標誌,它可以打開你的模式,以古靈精怪的行爲並創建極其難以發現的錯誤。相反,我強烈建議您使用source
方法,如果你要做到這一點,這將導致原有格局被插入:
/#{string.source}/ # => /foo/
代碼一行:
[email protected](/#{string}/).nil?
Stack Overflow是不一個「爲我寫代碼」的網站。相反,我們幫助您解決您編寫的代碼問題。請向我們展示您嘗試過的內容,解釋爲什麼它沒有做到您想要的,我們很樂意爲您提供幫助。 – 2014-11-03 20:06:32
您可以在[ruby-doc](http://www.ruby-doc.org/core-2.1.4/String.html) – 2014-11-03 20:17:48
中輕鬆找到您的答案。我已更新我的帖子。 – user3014317 2014-11-03 20:46:31