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