用于Rgb,Rgba,Hsl,Hsla颜色编码的正则表达式

时间:2012-09-12 09:50:32

标签: java regex

我正在为这种字符串寻找一些正则表达式

rgb(r,g,b)
rgba(r,g,b,a)
hsl(h,s%,l%)
hsla(h,s%,l%,a)

使用:

r,g,b integer included between 0 and 255, 
a float between 0 and 1 (truncated to first digit after the point)
h integer included between 0 and 359
s,l integer included between 0 and 100

对于rgb,我写了那些正则表达式:

rgb\(\s*((?:[0-2]?[0-9])?[0-9])\s*,\s*((?:[0-2]?[0-9])?[0-9])\s*,\s*((?:[0-2]?[0-9])?[0-9])\s*\)$

它有效,但它也允许像rgb(299,299,299)这样的字符串。 我怎样才能使它更有效? rgba,hsl和hsla怎么样? 感谢

3 个答案:

答案 0 :(得分:7)

最后我写了这些正则表达式:

    String keywords_color_regex = "^[a-z]*$";
    String hex_color_regex = "^#[0-9a-f]{3}([0-9a-f]{3})?$";
    String rgb_color_regex = "^rgb\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*\\)$";
    String rgba_color_regex = "^rgba\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])%?\\s*,\\s*((0.[1-9])|[01])\\s*\\)$";
    String hsl_color_regex = "^hsl\\(\\s*(0|[1-9]\\d?|[12]\\d\\d|3[0-5]\\d)\\s*,\\s*((0|[1-9]\\d?|100)%)\\s*,\\s*((0|[1-9]\\d?|100)%)\\s*\\)$";

我正在开发一个供个人使用的库,所以我更喜欢使用正则表达式。我完全评论了代码。感谢您的提示!

答案 1 :(得分:5)

我可以为您看到两种解决方案。要么:

1。从输入中提取数字,然后使用if条件

进行检查

a)正则表达式

  

RGB \(\ S *(?:(\ d {1,3})\ S * ,?){3} \)

b)视觉描述

Simple regular expression for parsing a RGB value

2。构建一个(相当复杂的)正则表达式来直接检查输入

a)正则表达式

  ?

RGB \(\ S *(:(:\ d {1,2} | 1 \ d \ d | 2(?:[0-4] \ d | 5 [0-5]))\ S * ,?){3} \)$
  
  rdb(0,0,255)=> 确定
  rdb(104,10,299)=>的 KO
  rdb(299,5,299)=>的 KO

b)视觉描述

A more robust regular expression for parsing a RGB value


提示:

  • 正则表达式允许整数介于0到359之间

      

    \ d {1,2} | [1-2] \ d {2} | 3 [0-5] \ d

  • 正则表达式允许整数介于0和100之间

      

    \ d {1,2} | 100

结论

作为一般经验法则,代码的可维护性更喜欢解决方案#1。 不参与正则表达式的开发人员会很快理解正在发生的事情。不要忘记对代码进行全面评论。

如果您更喜欢解决方案#2,那么请准备让开发人员具有正则表达式的良好背景,因为正则表达式很复杂。

答案 2 :(得分:1)

六角

/[\#]([a-fA-F\d]{6}|[a-fA-F\d]{3})/gm

RGB

/[Rr][Gg][Bb][\(](((([\d]{1,3})[\,]{0,1})[\s]*){3})[\)]/gm

RGBA

/[Rr][Gg][Bb][Aa][\(](((([\d]{1,3}|[\d\.]{1,3})[\,]{0,1})[\s]*){4})[\)]/gm

HSL

/[Hh][Ss][Ll][\(](((([\d]{1,3}|[\d\%]{2,4})[\,]{0,1})[\s]*){3})[\)]/gm

HSLA

/[Hh][Ss][Ll][Aa][\(](((([\d]{1,3}|[\d\%]{2,4}|[\d\.]{1,3})[\,]{0,1})[\s]*){4})[\)]/gm