我在替换消息中以 $ 字符开头的标签时遇到问题。
这是我尝试使用的代码:
$tag = '$TAG';
$message = '..text $TAGd d$TAG $TAG text..';
$pattern = '/\b\\'.$tag.'\b/';
echo $pattern."<br/>";
echo preg_replace($pattern, "REPLACED", $message);
输出:
/\b\$TAG\b/
..text $TAGd dREPLACED $TAG text..
我希望它替换最后一次出现的 $TAG,因为它是唯一一个不受其他字符阻碍的。然而,无论我如何尝试,它都会不断取代第二个。
我尝试过的一些变体: 跳过 $tag 变量字符串连接
$message = '..text $TAGd d$TAG $TAG text..';
$pattern = '/\b\$TAG\b/';
echo $pattern."<br/>";
echo preg_replace($pattern, "REPLACED", $message);
输出:
/\b\$TAG\b/
..text $TAGd dREPLACED $TAG text..
删除$之前的反斜杠
$message = '..text $TAGd d$TAG $TAG text..';
$pattern = '/\b$TAG\b/';
echo $pattern."<br/>";
echo preg_replace($pattern, "REPLACED", $message);
输出:
/\b\$TAG\b/
..text $TAGd d$TAG $TAG text..
在 $ 之前添加第二个反斜杠
$message = '..text $TAGd d$TAG $TAG text..';
$pattern = '/\b\\$TAG\b/';
echo $pattern."<br/>";
echo preg_replace($pattern, "REPLACED", $message);
输出:
/\b\$TAG\b/
..text $TAGd dREPLACED $TAG text..
有关此问题的任何帮助将不胜感激,因为我似乎无法全神贯注于我做错的事情。谢谢你! :)
最佳答案
使用 \B
作为单词开头,使用 \b
作为单词结尾:
$tag = '$TAG';
$message = '..text $TAGd d$TAG $TAG text..';
$pattern = '/\B\\'.$tag.'\b/';
echo $pattern."<br/>";
echo preg_replace($pattern, "REPLACED", $message);
对我来说效果很好。我不确定为什么会出现这种情况,因为通常它应该只是 \b
- 但它确实解决了问题。
关于php - 替换 PHP 中包含 $ 字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620771/