此代码在三个周期内重新格式化json字符串(使用三个正则表达式):
preg_replace (
array ( '/([^"{]+?),/', '/([^"{ ]+?)}"/', '/"{"/'),
array ( '"$1", ', '"$1"]', '["' ),
'{"fruits" : "{lemon,banana,apple}"}');
result: {"fruits" : ["lemon", "banana", "apple"]}
是否可以在一个周期内完成相同的操作(不一定是在PHP中)?
这个问题相当理论化。我想知道,如果有一种方法只需一次更换即可。
答案 0 :(得分:1)
直接在正则表达式中无法做到这一点。
但你可以用回调函数来做到这一点:
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}"}'
);
结果:{"fruits" : ["lemon", "banana", "apple"]}