2011-05-03 113 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

相关问题