我有一个看起来像这样的聊天记录文件(名称代表网址名称,文字是他们的聊天字符串)
name: some text
name2: more text
name: text
name3: text
我想为所有名称着色到:
红色。
例如:<font color=red>myname:</fontcolor> hello
我该怎么做?
我不知道为什么,但是此代码会在冒号
后为所有内容着色echo preg_replace('/(.*?):/', "<font color=#F00>$1</font>:", $output);
答案 0 :(得分:5)
之前已提供此问题的正确答案:
看第二个答案:
PHP: insert text up to delimiter
另外,你的实现是错误的,看看它应该以^:
开头的正则表达式echo preg_replace('/(.*?):/', "<font color=#F00>$1</font>:", $output);
应该是:
echo preg_replace('/^(.*?):/', "<font color=#F00>$1</font>:", $output);
答案 1 :(得分:1)
尝试:
echo preg_replace('/^(.*?):(.*?)$/s', "<font color=#F00>\\1</font>:\\2", $output);
编辑: 这应该工作(尝试过):
trim(preg_replace("/(?:\n)(.*?):(.*?)/s", "<font color=#F00>\\1</font>:\\2", "\n".$str))
最后尝试,也许试着爆炸它:
<?php
$content = 'name: some text
name2: more text
name: text
name3: text';
$tmp = explode("\n", $content);
for($i = 0; $i < count($tmp); $i ++) {
$tmp[$i] = '<span style="color:#F00">'.str_replace(':', '</span>:', $tmp[$i], 1);
}
echo implode("\n", $tmp);
?>
这确实假设在冒号之前的任何内容,它都不会有另一个冒号。
我的不好,我误解了str_replace()的最后一个参数。试试这个:
<?php
$tmp = explode("\n", $content);
for($i = 0; $i < count($tmp); $i ++) {
$tmp2 = explode(':', $tmp[$i]);
$tmp2[0] = '<span style="color:#F00">'.$tmp2[0].'</span>';
$tmp[$i] = implode(':', $tmp2);
}
echo implode("\n", $tmp);
答案 2 :(得分:0)
将$ 1之后的字体标记放在
之内echo preg_replace('/^(.*?):/', "<font color=#F00>$1:</font>", $output);
答案 3 :(得分:0)
试试这个
echo preg_replace('/([a-zA-Z0-9]*):/', "<font color=#F00>$1</font>:", $output);
答案 4 :(得分:0)
使正则表达式更具体:
= preg_replace('/^(\w+):/m', ...
或者,如果用户名可以包含非alphanum符号:
= preg_replace('/^(\S+):/m', "<b>$1</b>:", $output);