我想在Ruby中创建一个函数,用来检查一个字符串是否有两个或更多的连续大写字母,例如:检查两个或多个连续的字母是否大写
"Hello There" # => returns false
"Hello ThERe" # => returns true
我想在Ruby中创建一个函数,用来检查一个字符串是否有两个或更多的连续大写字母,例如:检查两个或多个连续的字母是否大写
"Hello There" # => returns false
"Hello ThERe" # => returns true
"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
因为... e红宝石不支持\p{upper}
,你必须使用
/\p{Lu}{2,}/
似乎没有工作: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
@bheeshmar:Ruby 1.9如何不支持Unicode常规类别作为属性名称?根据Oniguruma文档,我相信Ruby(奇怪地)使用而不是PCRE,你应该拥有它们。 – tchrist 2011-05-12 14:17:07
如果匹配指数为零,是否仍然评估为TRUE? – ridgerunner 2011-05-03 17:36:32
是的。只有'nil'和'false'被评估为false。其他一切(包括0)评估为真。看到我编辑的答案。 – 2011-05-03 17:52:31
'!!〜'更红宝石。 – sawa 2011-05-03 19:57:01