You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP字符串中提取RGB颜色值并转换为十六进制格式?

如何在PHP中将字符串里的RGB颜色值转换为十六进制格式?

当然可以!这里有一个简洁可靠的方案来实现你要的效果:

给定如下PHP字符串:

$str = 'content<div style="color:rgb(0,0,0);">more content</div><div style="color: rgb(255,255,255);">more content</div>';

我们需要提取其中的RGB颜色值,转换为十六进制格式,最终得到:

$new_str = 'content<div style="color:#000000;">more content</div><div style="color: #ffffff;">more content</div>';

实现思路

  • 用正则表达式匹配字符串中所有rgb(r, g, b)格式(兼容带空格和不带空格的写法)
  • 编写回调函数,把捕获到的RGB十进制数值转换为标准十六进制颜色码
  • 借助preg_replace_callback()完成全局替换

完整代码示例

<?php
$str = 'content&lt;div style="color:rgb(0,0,0);"&gt;more content&lt;/div&gt;&lt;div style="color: rgb(255,255,255);"&gt;more content&lt;/div&gt;';

// 定义RGB转十六进制的回调函数
function rgbToHex($matches) {
    // 提取并清理红、绿、蓝通道的数值(去掉可能的空格)
    $r = trim($matches[1]);
    $g = trim($matches[2]);
    $b = trim($matches[3]);
    
    // 格式化为两位十六进制,不足补0(比如0转为"00",255转为"ff")
    $hexColor = sprintf("#%02x%02x%02x", $r, $g, $b);
    
    // 保持原格式的空格一致性(原先是"color: rgb(...)"就返回"color: #xxx",反之则无空格)
    return strpos($matches[0], ' ') ? "color: $hexColor" : "color:$hexColor";
}

// 正则匹配所有rgb格式,执行替换
$new_str = preg_replace_callback('/color:\s*rgb\((\d+),\s*(\d+),\s*(\d+)\)/i', 'rgbToHex', $str);

echo $new_str;
?>

代码细节说明

  • 正则表达式/color:\s*rgb\((\d+),\s*(\d+),\s*(\d+)\)/i:
    • \s*匹配任意数量的空格,完美兼容rgb(0,0,0)和rgb(255, 255, 255)两种写法
    • (\d+)精准捕获每个颜色通道的十进制数值
    • /i修饰符忽略大小写,遇到RGB(...)的写法也能正常匹配
  • sprintf函数确保每个颜色通道都被格式化为两位十六进制,避免出现#f0f这种简写格式,保持和目标字符串一致的标准写法
  • 回调函数里的空格判断,保证替换后的字符串和原字符串的格式风格完全一致

内容的提问来源于stack exchange,提问作者Sometip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:11:06