在括号之间替换撇号

时间:2013-04-16 12:07:28

标签: php

我想使用preg_replace()替换PHP中{}之间的字符串中的'和'。

所以:

This is "some" {"text" : 'duudu', 'duuue' : "yey" }

应该是:

This is "some" {\"text\" : \"duudu\", \"duuue\" : \"yey\" }

请你就此提出建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用preg_replace_callback来解决此问题。请考虑以下代码:

$str = 'This is "some" {"text" : \'duudu\', \'duuue\' : "yey" } "and" {"some", "other"} "text"';
echo preg_replace_callback('~({[^}]*})~', function($m) {
       return preg_replace('~(?<!\\\\)[\'"]~', '\"', $m[1]);
    }, $str) . "\n";

更新:对于可能喜欢纯正基于正则表达式的解决方案的纯粹主义者:

$repl= preg_replace('~(?<!\\\\) [\'"] (?! (?: [^{}]*{ [^{}]*} ) * [^{}]* $)~x',
                    '\"' , $str);

<强>输出:

This is "some" {\"text\" : \"duudu\", \"duuue\" : \"yey\" } "and" {\"some\", \"other\"} "text"


现场演示:http://ideone.com/PfGzxd