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

PHP Regex: How do I replace all occurrences of a word starting with a colon?

我想用 $first_name 替换我的 $body 变量中出现的所有 :first_name,但我受困于正则表达式部分。正则表达式不起作用。当我回显正文时,原始字符串被打印出来。正确的正则表达式是什么?

$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+:first_name

$first_name = "Joe";
$text = "Hi :first_name. Have a nice day :first_name!";

$text = preg_replace('/:(\w+)/', $first_name, $text);

print_r($text);

输出:

Hi Joe. Have a nice day Joe!

既然你在评论中提出了这个问题,那么它的可扩展性更强,应该更容易。使用 str_replace 和数组:

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

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

strtr的另一种选择:

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