使用java从css中提取Hex颜色

时间:2016-08-23 08:27:06

标签: java css regex

我只是想把所有的Hex颜色值组成一个css文件。 十六进制值可以是#fff或#ffffff,所以这里是我用于此

的正则表达式
  • "#([a-f0-9]{3}){1,2}/i"
  • "^#[0-9a-zA-F]{3}"
  • final String HEX_PATTERN_STRING = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"; Pattern pattern = Pattern.compile(HEX_PATTERN_STRING); try { final URL CSS = new URL("https://maxcdn.bootstrapcdn.com/.../bootstrap.min.css"); URLConnection data = CSS.openConnection(); StringBuilder result = new StringBuilder(); try (BufferedReader in = new BufferedReader( new InputStreamReader( data.getInputStream()) )) { in.lines().forEach(result::append); Matcher matcher = pattern.matcher(result); while (matcher.find()) { System.out.println(matcher.group(0)); } System.out.println("Done"); } } catch (IOException ex) { }

但根本不工作。

我期待结果为

  

#996633#333 #ccc#969696 ....

但是什么都没有,知道我哪里错了?

以下是代码:

<head>

2 个答案:

答案 0 :(得分:2)

请注意,您的模式包含^(字符串的开头)和$(字符串的结尾)锚点,需要整个字符串匹配。

您需要移除这些锚点。

你也不能使用像/.../这样的正则表达式分隔符,就像在Java正则表达式中一样,你可以在模式中将修饰符作为(?i)传递,或者借助Pattern.CASE_INSENSITIVE标志(通常,与Pattern.UNICODE_CASE)。

此外,如果您不需要这些数字,则可以将捕获组变为非捕获组(?:...)

使用

final String HEX_PATTERN_STRING = "#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})";

答案 1 :(得分:0)

我正在使用这种模式:

Pattern PATTERN_HEXCOLOR = Pattern.compile(
    "#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\\b");

它确实接受像

这样的颜色值
#FFF
#FFFFFF

并忽略无效的颜色值,例如

#FFFF or #FFFFFFF