任何人都知道如何实现这一目标:
我希望发布消息并将“*”标签之间的所有内容着色。 像这样:
This [*]is[*] test [*]message[*] :)
要:
This [yellow]is[/yellow]> test [yellow]message[/yellow] :)
我想这样做是为了实现我的目标:
if(preg_match_all('/\*(.*?)\*/',$message,$match)) {
$beforemessage = explode("*", $message, 2);
$message = $beforemessage[0]. " <font color='yellow'>" .$match[0][0]. "</font>";
}
如果只返回:
This [yellow]is[yellow]
答案 0 :(得分:4)
只需使用preg_replace():
$message = "This *is* test *message*";
echo preg_replace('/\*(.*?)\*/', '<font color="yellow">$1</font>', $message);
This <font color="yellow">is</font> test <font color="yellow">message</font>
preg_match_all返回一个匹配数组,但您的代码只替换该数组中的FIRST匹配。你必须遍历数组来处理OTHER匹配。
答案 1 :(得分:0)
使用正则表达式时有一些方法。
一个是进行匹配 - 跟踪比赛的位置和比赛的长度。然后,您可以将原始消息拆分为子字符串,并将它们重新连接在一起。
另一种是使用正则表达式进行搜索/替换。
答案 2 :(得分:0)
尝试这个或类似方法:
<?php
$text = "Hello hello *bold* foo foo *fat* foo boo *think* end.";
$tagOpen = false;
function replaceAsterisk($matches) {
global $tagOpen;
$repl = "";
if($tagOpen) {
$repl = "</b>";
} else {
$repl = "<b>";
}
$tagOpen = !$tagOpen;
return $repl;
}
$result = preg_replace_callback( "/[*]/", "replaceAsterisk", $text);
echo $result;