php - 用于匹配 CSS 十六进制颜色的正则表达式

标签 php css regex colors hex

我正在尝试编写从 CSS 代码中提取所有十六进制颜色的正则表达式。

这就是我现在拥有的:

代码:

$css = <<<CSS

/* Do not match me: #abcdefgh; I am longer than needed. */

.foo
{
    color: #cccaaa; background-color:#ababab;
}

#bar
{
    background-color:#123456
}
CSS;

preg_match_all('/#(?:[0-9a-fA-F]{6})/', $css, $matches);

输出:

Array
(
    [0] => Array
        (
            [0] => #abcdef
            [1] => #cccaaa
            [2] => #ababab
            [3] => #123456
        )

)

我不知道如何指定只匹配以标点符号、空格或换行符结尾的颜色。

最佳答案

由于十六进制颜色代码也可能包含 3 个字符,您可以定义一个强制组和一个可选的字母和数字组,因此长而详尽的符号将是:

/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/

或者,如果您想要一个漂亮而简短的版本,您可以说您想要 1 组或 2 组 3 个字母数字字符,并且它们应该不区分大小写地匹配 (/i)。

/#([a-f0-9]{3}){1,2}\b/i

如果正则表达式引擎支持此 posix 字符类,您也可以编写 [[:xdigit:]] 而不是 [a-f0-9]。在这种情况下,您可以跳过最后的 /i,整个公式只多了两个字符,但可以说更具描述性。

/#([[:xdigit:]]{3}){1,2}\b/

关于php - 用于匹配 CSS 十六进制颜色的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837942/

相关文章:

css - 3d 对 Angular 线翻转不起作用

javascript - 尝试创建 jquery mouseover 和 mouseout 事件

Python 多个子正则表达式

php - 如何在 PHP preg_split 样式正则表达式中匹配一个或多个字母

php - 向/从服务器 cocos2d-x 发送/检索 xml 文件

php - Laravel 一对多关系不起作用 - 返回递归

java - MySQL 查询使用逻辑操作获取数据列表

php mysql 时间戳

php - 我不知道怎么调用它 php/css 错误

.net - 正则表达式,以字母/_开头的字符串,以及(可能)字母/数字/_之后的字符串