Php preg_replace,正则表达式模式不匹配

Php preg_replace, regex pattern doesn't match

我正在尝试开发一个基本的模板引擎,所以我不得不使用preg_replace。我对以下主题有疑问:

$subject = "{%content%} %content%";
$pattern = '/matched_regex/';
$replace = 'OK';
echo preg_replace($pattern,$replace,$subject);

并且输出必须是这样的:

{%content%} OK

换句话说,它将与 %content%

匹配

我应该怎么做正则表达式模式?

这将仅匹配不在 { 之后或位于主题字符串开头的 %content%%content% 之前的任何字符都与替换字符串中的 </code> 放回:</p> <pre><code>$subjects = [ '{%content%} %content%', 'Foo {%content%} bar %content% baz', 'Foo{%content%}bar%content%baz', 'Foo{%content%}bar%content%', '{%content%}%content%', '%content%{%content%}', ]; $replace = 'OK'; foreach ($subjects as $subject) { $pattern = '/(^|[^{])%content%/'; echo preg_replace($pattern, ''.$replace, $subject), PHP_EOL; }

输出:

{%content%} OK
Foo {%content%} bar OK baz
Foo{%content%}barOKbaz
Foo{%content%}barOK
{%content%}OK
OK{%content%}