使用java从css中提取Hex颜色

我只是试图将所有Hex颜色值形成一个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) {
    }

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

你需要删除这些锚点.

您不能使用/…/之类的正则表达式分隔符,如在Java正则表达式中,您可以将修饰符作为(?i)传递到模式中,或者借助Pattern.CASE_INSENSITIVE标志(通常使用Pattern.UNICODE_CASE).

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

使用

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