php如何匹配@消息@@

php如何匹配@消息@@,php,regex,string,Php,Regex,String,如果我有这样的东西 This is Before HELLO @@MESsage@@ @@MESSAGE@@ Hello @@MESSAGE@@ssd This is After 如何仅匹配@@MESSAGE@?我试过这个,但不起作用 preg_replace('/\b@@MESSAGE@@\b/u', xxx, xxxy); 问题在于单词边界\b。它们在单词和非单词字符之间匹配,其中单词字符是字母、数字或下划线。因为@不是单词字符,所以您要求它被这些字符包围,而不是相反。改为使用非

如果我有这样的东西

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
修饰符


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

preg_replace('/\B@@MESSAGE@@\B/', $replacement, $input);
顺便说一下,不需要
u
修饰符


您可以使用此选项确保目标周围有白色字符:

preg_replace('~(?:^|\s)\K@@MESSAGE@@(?=\s|$)~', $replacement, $subject);

您可以使用此选项确保目标周围有白色字符:

preg_replace('~(?:^|\s)\K@@MESSAGE@@(?=\s|$)~', $replacement, $subject);
要替换每个事件,请使用:

preg_replace('/@@message@@/i', xxx, xxxy);
要替换所有CAP中的每封@@MESSAGE@,请使用:

preg_replace('/@@MESSAGE@@/', xxx, xxxy);
若要仅替换@@MESSAGE@@本身,请使用

preg_replace('/\B@@MESSAGE@@\B/', xxx, xxxy);
如果您要查找的是最后一个案例,那么请接受,因为我就是从那里得到它的。

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

preg_replace('/@@message@@/i', xxx, xxxy);
要替换所有CAP中的每封@@MESSAGE@,请使用:

preg_replace('/@@MESSAGE@@/', xxx, xxxy);
若要仅替换@@MESSAGE@@本身,请使用

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

如果您要找的是最后一个箱子,请接受,因为我就是从那里得到的。

?您需要使用不区分大小写的,因为您的文本似乎并不完全相同。请准确地发布您所拥有的内容,然后我们可能会提供帮助。是要替换每次出现的@@MeSeAgE@还是仅替换大写版本?您还想匹配后面跟ssd的吗?您需要使用不区分大小写的,因为您的文本似乎并不完全相同。请准确地发布您所拥有的内容,然后我们可能会提供帮助。是要替换每次出现的@@MeSeAgE@还是仅替换大写版本?您还想匹配后面跟ssd的那个吗?