我正在尝试开发一个基本的模板引擎,所以我必须使用preg_replace这么多。关于以下问题,我有一个问题:
$subject = "{%content%} %content%";
$pattern = '/matched_regex/';
$replace = 'OK';
echo preg_replace($pattern,$replace,$subject);
,输出必须如下:
{%content%} OK
换句话说,它只会与%content%
我该怎么做正则表达式?
答案 0 :(得分:1)
这将仅匹配%content%
之后的{
或位于主题字符串开头的%content%
。将\1
之前的任何字符放回替换字符串中的$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, '\1'.$replace, $subject), PHP_EOL;
}
:
{%content%} OK
Foo {%content%} bar OK baz
Foo{%content%}barOKbaz
Foo{%content%}barOK
{%content%}OK
OK{%content%}
输出:
{{1}}