2010-02-10 62 views
43

如何對正則表達式的字符串,如果整個字符串匹配(而不是子字符串)將返回true?如何測試一個整數字符串與紅寶石正則表達式?

如:

test(\ee\ , "street") #=> returns false 
test(\ee\ , "ee") #=> returns true! 

謝謝。

+21

給一個人一個字符串比較,他會是真實的,給一個男人是一個正則表達式,他將失去推理和搜索互聯網的所有能力。 – Lazarus 2010-02-10 12:25:15

+0

@doctororange,你願意接受Tomas Markauskas'answer嗎?我不能刪除我的答案,因爲你接受它,丁丁我忘記了Ruby處理(一些)正則表達式元字符不同於大多數正則表達式實現。謝謝。 – 2010-02-10 12:38:24

+0

完成。謝謝你的回覆。 – doctororange 2010-02-11 14:11:44

回答

64

您可以將字符串的開頭與\A匹配,最後以\Z結尾。在紅寶石^$比賽還行的開頭和結尾,分別爲:

>> "a\na" =~ /^a$/ 
=> 0 
>> "a\na" =~ /\Aa\Z/ 
=> nil 
>> "a\na" =~ /\Aa\na\Z/ 
=> 0 
+4

您希望使用\ z而不是\ Z來匹配整個字符串。 '「hi \ n」=〜/ \ Ahi \ Z /' – 2014-01-24 08:58:01

+1

返回值(當不爲零)是第一個匹配的第一個字符的索引。 – 2016-03-22 14:58:59

4

所以,你問的是如何測試兩個字符串是否相等,權呢?只要使用字符串平等!這傳遞的是你和托馬斯舉的例子每一個:

'ee' == 'street' # => false 
'ee' == 'ee'  # => true 
"a\na" == 'a'  # => false 
"a\na" == "a\na" # => true 
+2

這是真的,但是一個正則表達式也允許你將'平等'的定義擴展到像/ ^(ee | oo)$ /很好的東西。 – doctororange 2010-02-11 13:55:39

+5

你是否得到這五個ups?我的意思是真的有幫助5人被告知,你可以檢查字符串與平等操作... ... - xD我沒有冒犯,但嘿來吧,這是真的嗎? – Timo 2011-06-09 09:10:06

+1

@Timo Lehto:它通過了OP提供的每一個單一規格,加上其他答案中的每個例子,它比其他答案簡單得多。我看不出有什麼問題。 – 2011-06-10 15:21:17

15

這似乎爲我工作,但它看起來醜陋的(可能是一個更有吸引力的方式是可以做到的):

!(string =~ /^ee$/).nil? 

當然,上面的//裏面的所有東西都可以是任何你想要的正則表達式。

例子:

>> string = "street" 
=> "street" 
>> !(string =~ /^ee$/).nil? 
=> false 
>> string = "ee" 
=> "ee" 
>> !(string =~ /^ee$/).nil? 
=> true 

注:Rails的控制檯測試與紅寶石(1.8.7)和導軌(3.1.1)

相關問題