2013-03-17 196 views
1

是否可以使用preg_replace()substr()来替换一个值,然后去掉替换过程中添加的不需要的内容?preg_replace和花括号

即,我有这样的代码:

$vars = array(
    "{VAR1}", 
); 

$replace = array(
    "black", 
); 

$styles = preg_replace($vars, $replace, $styles); 

什么我试图做的是,为{VAR1}在样式表中的每一个实例,我想用“黑色”来取代它,从而创造一个基本的样式表变量解析器。我看到的问题是,当我在$replace上使用print_r()时,我得到了适当的值,黑色。但是,当我通过preg_replace提供时,我得到{black}。我试图用这个来对付这样的:

foreach($replace as $replaced) 
{ 
    $replaced = substr($replace, 1, -1); 
} 

然而,没有变化!这样可以使用substr()preg_replace()吗?或者有没有更好的方法来解析这个问题。

+0

可以你展示一个例子乐?你把演示放在[http://phpfiddle.org/]中,为什么你用preg_replace为什么不用str_replace? – 2013-03-17 05:36:41

+0

请参阅[花括号在PHP中的字符串](http://stackoverflow.com/questions/2596837/curly-braces-in-string-in-php) – 2013-03-17 05:43:35

回答

2

这样做的一个更好的工具是strtr

你需要定义你的替换这样的:

$replacements = array(
    "{VAR1}" => "black" 
); 

然后:

$styles = strtr($styles,$replacements); 
+0

谢谢。我将代码移到了另一个位置,并用'strtr()'替换了'preg_replace()'。非常感谢。 – Seabody 2013-03-17 05:50:20

1

您的问题不在$replace,而是在$vars
您正在使用大括号作为RegEx分隔符。

试试这个:

$vars = array(
    "/{VAR1}/", 
    ... 
);