0

如果我有这样的事情

This is Before HELLO

@@MESsage@@

@@MESSAGE@@

Hello @@MESSAGE@@ssd

This is After

我怎样才能只匹配 @@MESSAGE@@ ?我试过了,但它不起作用

preg_replace('/\b@@MESSAGE@@\b/u', xxx, xxxy);
4

3 回答 3

2

问题是单词边界\b。它们匹配单词和非单词字符,其中单词字符是字母、数字或下划线。因为@不是单词字符,所以你要求它被那些包围,而不是相反。改为使用非单词边界:

preg_replace('/\B@@MESSAGE@@\B/', $replacement, $input);

顺便说一句,不需要u修饰符。

工作演示。

于 2013-06-28T23:46:42.587 回答
2

要替换每次出现,请使用:

preg_replace('/@@message@@/i', xxx, xxxy);

要替换所有大写字母中的每个@@MESSAGE@@,请使用:

preg_replace('/@@MESSAGE@@/', xxx, xxxy);

要仅替换@@MESSAGE@@ 本身,请使用

preg_replace('/\B@@MESSAGE@@\B/', xxx, xxxy);

如果最后一个案例是您正在寻找的案例,那么请接受m.buettner 的回答,因为这就是我得到它的地方。

于 2013-06-29T00:32:28.363 回答
0

您可以使用它来确保目标周围有白色字符:

preg_replace('~(?:^|\s)\K@@MESSAGE@@(?=\s|$)~', $replacement, $subject);
于 2013-06-28T23:51:22.257 回答