我只是想把所有的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>
答案 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