如果我有这样的事情
This is Before HELLO
@@MESsage@@
@@MESSAGE@@
Hello @@MESSAGE@@ssd
This is After
我怎样才能只匹配 @@MESSAGE@@ ?我试过了,但它不起作用
preg_replace('/\b@@MESSAGE@@\b/u', xxx, xxxy);
问题是单词边界\b
。它们匹配单词和非单词字符,其中单词字符是字母、数字或下划线。因为@
不是单词字符,所以你要求它被那些包围,而不是相反。改为使用非单词边界:
preg_replace('/\B@@MESSAGE@@\B/', $replacement, $input);
顺便说一句,不需要u
修饰符。
要替换每次出现,请使用:
preg_replace('/@@message@@/i', xxx, xxxy);
要替换所有大写字母中的每个@@MESSAGE@@,请使用:
preg_replace('/@@MESSAGE@@/', xxx, xxxy);
要仅替换@@MESSAGE@@ 本身,请使用
preg_replace('/\B@@MESSAGE@@\B/', xxx, xxxy);
如果最后一个案例是您正在寻找的案例,那么请接受m.buettner 的回答,因为这就是我得到它的地方。
您可以使用它来确保目标周围有白色字符:
preg_replace('~(?:^|\s)\K@@MESSAGE@@(?=\s|$)~', $replacement, $subject);