Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换字符串中的多个十六进制颜色_Php_Regex - Fatal编程技术网

Php 替换字符串中的多个十六进制颜色

Php 替换字符串中的多个十六进制颜色,php,regex,Php,Regex,我在将多个十六进制颜色更改为span时遇到问题。当前代码只更改一种颜色。你知道如何使它适用于多种颜色吗 function convertHexToSpan($name) { $name = preg_replace('/\*#([a-f\d]{6})(.*)\*[a-f\d]+/', "<span style='color:$1'>$2</span>", $name); return $name; } $text = "#ff6600Hello #ff0000

我在将多个十六进制颜色更改为span时遇到问题。当前代码只更改一种颜色。你知道如何使它适用于多种颜色吗

function convertHexToSpan($name)
{
  $name = preg_replace('/\*#([a-f\d]{6})(.*)\*[a-f\d]+/', "<span style='color:$1'>$2</span>", $name);
  return $name;
}


$text = "#ff6600Hello #ff0000world";
$newText = convertHexToSpan($text);
OUTPUT SHOULD BE "<span style='color:#ff600'>Hello</span><span style='color:#ff0000'>world</span>
函数convertexttospan($name)
{
$name=preg\u replace('/\*.([a-f\d]{6})(.*)\*[a-f\d]+/',“$2”,$name);
返回$name;
}
$text=“#ff6600Hello#ff0000world”;
$newText=convertHexToSpan($text);
输出应为“Helloworld”

更新正则表达式将使您在大部分情况下都能做到这一点,但我们必须做出一些与原始问题略有不同的假设

如果使用以下表达式:

/(#[a-f\d]{6})([^ ]+)/
preg_replace为您执行重复搜索,因为regex不是真正用于迭代的,所以我删除了第二个十六进制搜索。这将查找6个十六进制数字作为第一组,然后下一组是任何不是空格的字符

注意:我假设您试图打破单词边界,但如果不是这样,则需要修改。我还假设您希望在转换后保留单词之间的空间,但您的示例显示没有空间

要删除单词之间的空格,只需修改正则表达式以匹配空格(然后它们将被删除),如下所示:

/(#[a-f\d]{6})([^ ]+)( )+/

@ialarmedalien edited你的正则表达式与你的输入不匹配,因此你目前没有得到任何替换。你为什么要在十六进制颜色的开头和单词之前找一个*呢?“\*”告诉正则表达式要找一个字面的*真棒的家伙!你能给我写同样的东西,但单词之间没有空格吗?我真的不擅长表达ns.@i-manu更新了答案以删除单词之间的空格,基本上,您只需添加第三组来捕捉空格,然后它就会被替换。