php preg_replace 如何将匹配的所有结果按某个动作处理而不是全体替换为相同的结果?

代码如下:

$content = 'request:{"user": "yhm"},server:{"user": "yhm"}';
$content = preg_replace('/\{.+?\}/i', 'test', $content);

目前是将所有匹配的结果都匹配成了 test ,我希望是将所有匹配的结果通过:

json_encode('{"user": "yhm"}', JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

类似这样的处理一下,实在想不出来,请大神指点一二,谢谢。

阅读 1.3k
1 个回答

看你也没有说明具体想要的结果啥样的,但是通过你第二个例子,我猜测可能你想要干的是这么个事情:

  1. 第一种情况:

    $content = 'request:{"user": "yhm"},server:{"user": "yhm"}';
    $content = preg_replace_callback('/\{.+?\}/i', function ($match) {
     return json_encode($match[0], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    }, $content);
    
    echo $content;

    输出结果数据结构:request:"{\"user\": \"yhm\"}",server:"{\"user\": \"yhm\"}"

  2. 第二种情况

    $content = 'request:{"user": "yhm"},server:{"user": "yhm"}';
    
    echo json_encode($content,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)

    数据结果数据结构:"request:{\"user\": \"yhm\"},server:{\"user\": \"yhm\"}"

  3. 第三种情况

    $content = 'request:{"user": "yhm"},server:{"user": "yhm"}';
    
    $content = '{' . preg_replace_callback('/([A-z0-9]+):/i', function ($match) {
         return json_encode($match[1], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . ":";
     }, $content) . '}';
    
    echo $content;

    输出结果数据结构:{"request":{"user": "yhm"},"server":{"user": "yhm"}}

  4. 第四种情况
    这种情况是基于第三种情况做的处理

    $content = 'request:{"user": "yhm"},server:{"user": "yhm"}';
    
    $content = json_encode('{' . preg_replace_callback('/([A-z0-9]+):/i', function ($match) {
         return json_encode($match[1], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . ":";
     }, $content) . '}', JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    
    echo $content;

    输出结果数据结构:"{\"request\":{\"user\": \"yhm\"},\"server\":{\"user\": \"yhm\"}}"

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题