2015-03-02 77 views
0

我想开发一个基本的模板引擎,所以我必须使用preg_replace这么多。我有一个问题关于主题如下:Php preg_replace,正则表达式模式不匹配

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

和输出必须是这样的:

{%content%} OK 
换句话说

它将与%content%

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

+0

我已经试过这 $模式=“/ [^ {] \ S *(。?*)\ S *%[^}] /'; – 2015-03-02 21:31:32

+0

and this $ pattern ='/{{0}?%\s*(.*?)\s*%}{0}/'; – 2015-03-02 21:35:09

回答

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%} 
+0

太好了。非常感谢你! :) – 2015-03-02 21:50:08