php如何匹配@@ MESSAGE @@

时间:2013-06-28 23:37:54

标签: php regex string

如果我有这样的东西

This is Before HELLO

@@MESsage@@

@@MESSAGE@@

Hello @@MESSAGE@@ssd

This is After

我怎么能只匹配@@ MESSAGE @@?我试过这个并没有用

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

3 个答案:

答案 0 :(得分:2)

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

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

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

Working demo.

答案 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);