2011-05-03 68 views

回答

6
"Hello There" =~ /[A-Z]{2}/ 
# => nil 

"Hello ThERe" =~ /[A-Z]{2}/ 
# => 8 

這將返回零測試這一點,如果它沒有字母,否則中第一次出現的索引(你可以把這些作爲真/假)

def has_two_uppercase_letters 
    str =~ /[A-Z]{2}/ 
end 

或者,如果你想返回一個明確的true/false:

def has_two_uppercase_letters 
    (str =~ /[A-Z]{2}/) != nil 
end 
+0

如果匹配指數爲零,是否仍然評估爲TRUE? – ridgerunner 2011-05-03 17:36:32

+0

是的。只有'nil'和'false'被評估爲false。其他一切(包括0)評估爲真。看到我編輯的答案。 – 2011-05-03 17:52:31

+2

'!!〜'更紅寶石。 – sawa 2011-05-03 19:57:01

4
string =~ /[A-Z]{2,}/ 

比賽中將「A」設置爲「Z」2次或更多次。

您可以在http://rubular.com/

+0

它的工作原理,但沒有必要檢測兩個以上。檢測兩個就足夠了。 – sawa 2011-05-03 19:19:22

+0

好點,@sawa。 @ dmarkow的回答更加貼切。但Rubular是正則表達式測試的好資源。 – bheeshmar 2011-05-03 20:24:39

+0

我也喜歡紅色。這很方便。 – sawa 2011-05-03 21:47:45

3

因爲... e紅寶石不支持\p{upper},你必須使用

/\p{Lu}{2,}/ 
+0

似乎沒有工作:pik ruby​​ -e「p'MMXII'=〜/ \ p {Lu} {2,} /」ruby 1.8.7(2011-02-18 patchlevel 334)[i386-mingw32] -e:1:警告:正則表達式具有無效間隔 -e:1:警告:正則表達式具有'}」不逃逸 零 紅寶石1.9.2p180(2011-02-18)[I386-的mingw32] - e:1:無效的字符屬性名稱{Lu}:/ \ p {Lu} {2,}/ – bheeshmar 2011-05-12 13:42:41

+0

@bheeshmar:Ruby 1.9如何不支持Unicode常規類別作爲屬性名稱?根據Oniguruma文檔,我相信Ruby(奇怪地)使用而不是PCRE,你應該擁有它們。 – tchrist 2011-05-12 14:17:07