使用java从css中提取十六进制颜色
我只是想让所有的十六进制颜色值形成一个css文件。 十六进制值可以是#fff或#ffffff,所以这里是我用于此的正则表达式
"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"
"#([a-f0-9]{3}){1,2}/i"
"^#[0-9a-zA-F]{3}"
但根本不起作用
我期待着这样的结果
#996633 #333 #ccc #969696 ....
但是什么都没有,知道我哪里出了问题吗
代码如下:
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) {
}
# 1 楼答案
我正在使用这种模式:
它确实接受像这样的颜色值
并忽略无效的颜色值,如
# 2 楼答案
注意,您的模式包含
^
(字符串的开头)和$
(字符串的结尾)锚,需要整个字符串匹配你需要移除这些锚
您不能使用像
/.../
这样的正则表达式分隔符,就像在Java正则表达式中一样,您可以在模式内以(?i)
的形式传递修饰符,或者在Pattern.CASE_INSENSITIVE
标志的帮助下传递修饰符(通常使用Pattern.UNICODE_CASE
)此外,如果您不需要数字,您可以将捕获组转换为非捕获
(?:...)
使用