PHP:替换所有实例

时间:2011-09-04 02:26:04

标签: php regex replace preg-replace

我有一个看起来像这样的聊天记录文件(名称代表网址名称,文字是他们的聊天字符串)

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

5 个答案:

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