PHP:替换所有实例


PHP: Replace all instances

我有一个聊天日志文件,看起来像这样(名称代表屏幕名称和文本是他们的聊天字符串)

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);

这个问题的正确答案已经在前面提供了:

看第二个答案:

PHP:插入文本到分隔符

另外,你的实现是错误的,看看正则表达式,它应该以^:

开始
echo preg_replace('/(.*?):/', "<font color=#F00>$1</font>:", $output);
应:

echo preg_replace('/^(.*?):/', "<font color=#F00>$1</font>:", $output);

try:

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);

把:放到$1

echo preg_replace('/^(.*?):/', "<font color=#F00>$1:</font>", $output);

试试这个

echo preg_replace('/([a-zA-Z0-9]*):/', "<font color=#F00>$1</font>:", $output);

使正则表达式更具体:

= preg_replace('/^('w+):/m', ...

或者如果用户名可以包含非字母符号:

= preg_replace('/^('S+):/m', "<b>$1</b>:", $output);