我有一个聊天日志文件,看起来像这样(名称代表屏幕名称和文本是他们的聊天字符串)
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);