php - 替换 PHP 中包含 $ 字符的单词

标签 php regex preg-replace

我在替换消息中以 $ 字符开头的标签时遇到问题。

这是我尝试使用的代码:

$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/

相关文章:

php - 从外部网站登录

java - 正则表达式 - 替换仅包含一个但重复字符的字符串

regex - perl 正则表达式从字符串 : why does it work? 中删除初始全空白行

javascript - 正则表达式删除任何不是数字或特定单词的内容

php - 解析电子邮件或 html 模板的最佳方法是什么?

php - 高亮文本,除了 html 标签

php - 将数组转换为键值对数组

php - 在 MySQL 中更新表行的问题

php zip 内容编码

php - 用于匹配(并删除)包含文件中的多行 PHP 代码的正则表达式模式