Php 是否可以压缩重叠替换?

Php 是否可以压缩重叠替换?,php,regex,Php,Regex,此代码以三个周期(使用三个正则表达式)重新格式化json字符串: 是否可以在一个周期内完成相同的操作(不一定在PHP中) 这个问题相当理论化。我想知道,是否有一种方法可以在一次替换中完成此操作。在regex中直接完成此操作是不可能的 但您可以通过回调函数来实现这一点: preg_replace_callback( '/((?:"{|,)[^,}]+(?:}")?)/', function ($match) { if(substr($match[0],0,2) ==

此代码以三个周期(使用三个正则表达式)重新格式化json字符串:

是否可以在一个周期内完成相同的操作(不一定在PHP中)


这个问题相当理论化。我想知道,是否有一种方法可以在一次替换中完成此操作。

在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}"}'
);