2010-10-20 87 views
6
preg_replace("/{{(.*?)}}/e","$$1",$rcontent); 

请解释声明,我...我无法理解这PHP的preg_replace

+0

匹配"def"为什么投票关闭这个?很明显,问题在于询问正则表达式的含义。 – JAL 2010-10-20 05:00:06

+0

@亚历克斯JL:我没有投票结束,但它一定是标题。我不知道元标签与这个问题有什么关系。 – BoltClock 2010-10-20 05:24:04

+0

@BoltClock它很神秘。 – JAL 2010-10-20 06:30:43

回答

4

考虑这样一个例子使用:

$rcontent = "abc {{foo}} def"; 
$foo = 'bar'; 
$rcontent = preg_replace("/{{(.*?)}}/e","$$1",$rcontent); 
echo $rcontent; // prints abc bar def 

我假设你正在分配的preg_match值回到$rcontent,否则它没有任何意义。

现在正在使用的正则表达式是{{(.*?)}}看起来对{{}}之间的任何(非greedyly),还记得因为括号匹配的字符串。
在我的情况下,.*?匹配foo

接下来的替换部分是$$1。现在$1foo,所以$$1将是$foo这就是bar。因此{{foo}}将被替换为$foo的值bar

如果$$1仅仅是一个类型,你想用$1那么正则表达式替换{{foo}}foo

+0

$ file = file(“templates/index.html”); $ rcontent = join(“”,$ file); $ rcontent = preg_replace(“/{{(.*?)}}/ e”,“$$ 1”,$ rcontent); print $ rcontent; 这是我的code.its工作完美..但模板/ index.html文件没有任何palenthesis它.. – sowmiya 2010-10-20 06:13:28

+0

@sowmiya:对不起,我没有得到你的问题。 – codaddict 2010-10-20 07:31:36

+0

正在将“templates/index.html”的内容复制到一个php文件中....要使用此正则表达式复制内容,我在“templates/index.html”文件中没有任何大括号。但它完美的作品..如何这个模板引擎工作我不知道... – sowmiya 2010-10-20 08:50:46