这段代码用三个周期(使用三个正则表达式)重新格式化一个json字符串:
preg_replace (
array ( '/([^"{]+?),/', '/([^"{ ]+?)}"/', '/"{"/'),
array ( '"$1", ', '"$1"]', '["' ),
'{"fruits" : "{lemon,banana,apple}"}');
result: {"fruits" : ["lemon", "banana", "apple"]}
是否有可能在一个循环中做同样的事情(不一定在PHP中)?
这个问题相当理论性。我想知道,是否有一种方法可以在一次替换中做到这一点。
在正则表达式中不可能直接这样做。
但是你可以用一个回调函数来做:
preg_replace_callback(
'/((?:"{|,)[^,}]+(?:}")?)/',
function ($match) {
if(substr($match[0],0,2) == '"{')
{ #first array element
$ret = '["'.substr($match[0],2).'"';
}elseif (substr($match[0], strlen($match[0])-2, 2) == '}"')
{ #last array element
$ret = ', "'.substr($match[0],1,strlen($match[0])-3).'"]';
}else{ #middle
$ret = ', "'.substr($match[0],1).'"';
}
return $ret;
},
'{"fruits" : "{lemon,banana,apple}"}'
);
Result: {"fruits" : ["lemon", "banana", "apple"]}