2015-03-02 28 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