Str替换和逻辑

时间:2012-12-07 06:34:57

标签: php str-replace

我希望将{替换为{{}而将}替换为{}},因为我需要转义那些{& } {} {blah}。 如果我输入{{}blah{}}我希望我的脚本输出$output = str_replace(array("}", "{"), array("{}}", "{{}"), '{blah}'); ,请参阅? 但它看不出我做了什么

{{}blah{{}}}

但是作为输出我得到了这个:{{}blah{}}而不是{{1}}

2 个答案:

答案 0 :(得分:4)

PHP迭代你在$ search参数中放入的每个数组项的整个字符串。

事实上,将'{blah}'替换为您的第一个数组项'{blah{}}',然后从'{'替换为'{{}blah{{}}}',因为之后还有另一个'{'第一次更换。

最好使用正则表达式执行此操作,使用单个RegExp模式,它只会在输入字符串中运行一次。

$str = preg_replace('/(\{|\})/', '{\\1}', '{blah}');

答案 1 :(得分:2)

那是因为替换本身包含要搜索的字符串。我会用preg_replace_callback改写它:

echo preg_replace_callback('/{|}/', function($match) {
    return $match[0] == '{' ? '{{}' : '{}}';
}, '{bla}');

// {{}bla{}}