2014-01-28 29 views
3

在Ruby中,我看到了很多的代碼做喜歡的東西:布爾檢查一個字符串是否與ruby中的正則表達式匹配?

def test(s) 
    s =~ /Macintosh/ 
end 

測試一個串是否正則表達式匹配。但是,這將返回fixnum或nil,具體取決於它是否找到匹配項。有沒有辦法做同樣的操作,但讓它返回一個布爾值來判斷它是否匹配?

我想到的兩種可能的解決方案是!(s =~ /Macintosh/).nil?!(s !~ /Macintosh/),但這兩種解決方案都不太可讀。有什麼樣:

def test(s) 
    s.matches?(/Macintosh/) 
end 
+2

'!!(string =〜/ some some regex /)'? – rathrio

+1

@rathrio將檢查,然後檢查爲零,我問是否有一個布爾方法,將返回true或false。 – kddeisz

+0

只是出於興趣:是否有一個特定的原因,你爲什麼要布爾?在大多數情況下,返回nil或非零值都可以正常工作,對嗎? – rathrio

回答

9

您可以使用此:

def test(s) 
    /Macintosh/ === s 
end 
+0

問題是,是否存在一個方法來進行布爾檢查,而不需要在最後檢查nil。 !和.nil一樣嗎? – kddeisz

+0

@kdeisz:這個? –

+0

勝利者是你! – kddeisz

0

三元語法可能幫助或適合不同風格的偏好:

x = '10.0.0' 
x =~ /\d*\.\d*\.\d*/ ? true : false # => true 

# Unlike c-style languages, 0 is true in ruby: 
x =~ /\d*\.\d*\.\d*/     # => 0 
0 ? true : false      # => true 

的情況下的順序比較操作===是重要的[1],例如:

/\d*\.\d*\.\d*/ === x 
#=> true 
x === /\d*\.\d*\.\d*/ 
#=> false 

[1] https://ruby-doc.org/core-2.2.0/Regexp.html#method-i-3D-3D-3D

相關問題