Php 是否可以压缩重叠替换?
此代码以三个周期(使用三个正则表达式)重新格式化json字符串: 是否可以在一个周期内完成相同的操作(不一定在PHP中)Php 是否可以压缩重叠替换?,php,regex,Php,Regex,此代码以三个周期(使用三个正则表达式)重新格式化json字符串: 是否可以在一个周期内完成相同的操作(不一定在PHP中) 这个问题相当理论化。我想知道,是否有一种方法可以在一次替换中完成此操作。在regex中直接完成此操作是不可能的 但您可以通过回调函数来实现这一点: preg_replace_callback( '/((?:"{|,)[^,}]+(?:}")?)/', function ($match) { if(substr($match[0],0,2) ==
这个问题相当理论化。我想知道,是否有一种方法可以在一次替换中完成此操作。在regex中直接完成此操作是不可能的 但您可以通过回调函数来实现这一点:
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}"}'
);
结果:
{“水果”:[“柠檬”、“香蕉”、“苹果”]}
最初的任务是什么?为什么json格式很重要?json不重要。这只是一个例子,现在还不清楚。在这个时刻,这似乎是任何人都不应该做的事情。这就是为什么问题是:“有可能吗…”我认为这是不可能的。您正在引入新角色,需要不同的替换。正则表达式一次只能使用一种替换(至少目前是这样)。
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}"}'
);