PHP正则表达式:如何替换以冒号开头的所有单词?

PHP正则表达式:如何替换以冒号开头的所有单词?,php,regex,preg-replace,Php,Regex,Preg Replace,我想用$first_名称替换$body变量中出现的所有:first_名称,但我仍然坚持使用正则表达式部分。正则表达式不起作用。当我回显主体时,原始字符串被打印出来。正确的正则表达式是什么 $first_name = "Joe"; $body = "Hi :first_name. Have a nice day :first_name!"; $regex = "/\b:first_name\b/"; $body = preg_replace($regex, $first_name, $body);

我想用$first_名称替换$body变量中出现的所有:first_名称,但我仍然坚持使用正则表达式部分。正则表达式不起作用。当我回显主体时,原始字符串被打印出来。正确的正则表达式是什么

$first_name = "Joe";
$body = "Hi :first_name. Have a nice day :first_name!";
$regex = "/\b:first_name\b/";
$body = preg_replace($regex, $first_name, $body);
echo $body;
正则表达式::\w+或:名字

输出:

正则表达式::\w+或:名字

输出:


由于您在评论中提出了这一问题,因此它更具可扩展性,应该更容易实现。使用str_替换和数组:

$array[':first_name'] = "Joe";
$array[':last_name'] = "Smith";

$body = str_replace(array_keys($array), $array, $body);
strtr的另一个替代方案:


由于您在评论中提出了这一问题,因此它更具可扩展性,应该更容易实现。使用str_替换和数组:

$array[':first_name'] = "Joe";
$array[':last_name'] = "Smith";

$body = str_replace(array_keys($array), $array, $body);
strtr的另一个替代方案:


\b在空格和:./\:first\u name/之间不匹配。为什么它必须是正则表达式?这是非常直接的str_replace;那么str_替换就更酷、更可扩展了。@altoids好的,我必须确保。如果是这样的话,可能会有另一种方法来实现这一点,但我看到您找到了解决方案,干杯。\b空格和:./\:first\u name/之间不匹配。为什么必须是regex?这是非常直接的str_replace;那么str_替换就更酷、更可扩展了。@altoids好的,我必须确保。如果是这样的话,可能会有另一种方法,但我看到你找到了解决方案,cheers.OP希望Joe不要$first_name。@Jay Blanchard我错过了。更新!OP希望乔不要姓$first_。@Jay Blanchard我错过了。更新!
$array[':first_name'] = "Joe";
$array[':last_name'] = "Smith";

$body = str_replace(array_keys($array), $array, $body);
$body = strtr($body, $array);