Ruby正则表达式匹配灰度颜色

Ruby正则表达式匹配灰度颜色,ruby,regex,Ruby,Regex,我想要一个红宝石正则表达式来匹配十六进制灰度 所以它会匹配 #000000 #ababab #ffffff 但不是 #ccddcc #afafa0 等等。\h是十六进制的ruby正则表达式代码(…)捕获子匹配,并且\1允许您引用第一个子匹配: /#(\h\h)\1\1/ 在irb中: >> %w{ #000000 #ababab #ffffff #ccddcc #afafa0 }.map { |s| s =~ /#(\h\h)\1\1/ } => [0, 0, 0, ni

我想要一个红宝石正则表达式来匹配十六进制灰度

所以它会匹配

#000000
#ababab
#ffffff
但不是

#ccddcc
#afafa0

等等。

\h
是十六进制的ruby正则表达式代码
(…)
捕获子匹配,并且
\1
允许您引用第一个子匹配:

/#(\h\h)\1\1/
在irb中:

>> %w{ #000000 #ababab #ffffff #ccddcc #afafa0 }.map { |s| s =~ /#(\h\h)\1\1/ }
=> [0, 0, 0, nil, nil]                                                         
试试这个:

^#([0-9a-fA-F][0-9a-fA-F]?)\1\1$
哪一个匹配:

#000000
#aaa
#ababab
#ffffff
正如你在Rubular上看到的:


它要么重复一个字符3次(匹配
\AAA
),要么重复一个双字符3次(匹配
\666666
\121212
)。

我会向上投票,除非您的正则表达式不限制为十六进制数。如果需要,您可以使用
[:xdigit:][/code>代替
[0-9a-fA F]
。@Wayne,谢谢,不知道Ruby接受Posix字符类。虽然我不是他们的粉丝:我觉得他们有点啰嗦…@巴特,我同意。我刚刚注意到另一种编写方法:您可以使用
[0-9a-fA-F]{1,2}
,而不是
[0-9a-fA-F][0-9a-fA-F]?
。或者对于更短的winder,
[0-9a-z]{1,2}
并将/i标志添加到regexp中。1.9中是否新增了
\h
?它在局部(1.9.2)有效,但在红细胞(1.8.7)上无效。