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)上无效。