Hem*_*ulo 32 css php regex hex colors
我正在尝试编写从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);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => Array
(
[0] => #abcdef
[1] => #cccaaa
[2] => #ababab
[3] => #123456
)
)
Run Code Online (Sandbox Code Playgroud)
我不知道如何指定只匹配那些以标点符号,空格或换行符结尾的颜色.
Gol*_*rol 49
由于十六进制颜色代码也可能包含3个字符,因此您可以定义一个强制组和一组可选的字母和数字,因此长而精细的符号将是:
/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/
Run Code Online (Sandbox Code Playgroud)
或者如果你想要一个漂亮而简短的版本,你可以说你想要1组或2组3个字母数字字符,并且它们应该不区分大小写(/i).
/#([a-f0-9]{3}){1,2}\b/i
Run Code Online (Sandbox Code Playgroud)
rob*_*nst 21
较短版本的GolezTrol的答案可以避免两次编写字符集:
/#([a-fA-F0-9]{3}){1,2}\b/
Run Code Online (Sandbox Code Playgroud)
mod*_*odu 20
接受的答案告诉你如何使用正则表达式,因为这是你的问题.但是你真的不需要使用正则表达式.通常我会这样做:
if(ctype_xdigit($color) && strlen($color)==6){
// yay, it's a hex color!
}
Run Code Online (Sandbox Code Playgroud)
对于100.000次迭代:
正则表达式解决方案*:0.0802619457245秒
带有strlen的Xdigit:0.0277080535889秒
*:十六进制: ([a-fA-F0-9]{6})