我在更换标记以$字符开头的邮件中时遇到问题。
这是我正在尝试使用的代码:
$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变量字符串concatination
$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..
对于这个问题的任何帮助将不胜感激,因为我似乎无法解决我做错的事情。谢谢! :)
答案 0 :(得分:1)
用美元符号反斜杠零($ \ 0)替换美元符号($)
http://forums.devshed.com/php-development-5/preg-replace-problem-with-dollar-signs-35089.html
答案 1 :(得分:1)
使用\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
- 但它确实解决了这个问题。
答案 2 :(得分:1)
您需要使用其他锚点而不是\b
,因为它匹配单词\w
和非单词\W
章程之间的位置($
不是单词字符)
也许你的表达更像是:
'/(?<!\w)' . $tag . '\b/'
但这取决于你希望它匹配的时间。