为了账号安全,请及时绑定邮箱和手机立即绑定

PHP Regex 查找并替换所有以特定字符开头和结尾的字符串

PHP Regex 查找并替换所有以特定字符开头和结尾的字符串

PHP
料青山看我应如是 2022-12-11 19:10:57
说到正则表达式,我是个新手。我有一个包含时间戳的 json 字符串,我想删除date字符串中所有出现的字段。美化后的 json 字符串如下所示:{  "abc": 157,  "efg": 1,  "hij": "1",  "klm": "0.00",  "created_at": {    "date": "2020-04-08 12:53:34.682759",    "timezone_type": 3,    "timezone": "UTC"  },  "updated_at": {    "date": "2020-04-08 12:53:34.682759",    "timezone_type": 3,    "timezone": "UTC"  }}"date": "我想删除所有以开头和结尾的字符串",所以输出看起来像下面这样:{  "abc": 157,  "efg": 1,  "hij": "1",  "klm": "0.00",  "created_at": {    "timezone_type": 3,    "timezone": "UTC"  },  "updated_at": {    "timezone_type": 3,    "timezone": "UTC"  }}我知道preg_match_all实际上可以帮助找到所有匹配项,但是,我发现在构建模式时遇到困难,尤其是我的模式包含逗号和双引号。
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

正则表达式(或任何其他字符串函数)不是编辑 JSON 字符串的方式!您必须将其解码为数组,然后对其进行编辑,最后将其重新编码为 JSON。


$json = <<<'JSON'

{

  "abc": 157,

  "efg": 1,

  "hij": "1",

  "klm": "0.00",

  "created_at": {

    "date": "2020-04-08 12:53:34.682759",

    "timezone_type": 3,

    "timezone": "UTC"

  },

  "updated_at": {

    "date": "2020-04-08 12:53:34.682759",

    "timezone_type": 3,

    "timezone": "UTC"

  }

}

JSON;


$arr = json_decode($json, true);


function delete_key(&$arr, $key) {

    foreach($arr as $k => &$v) {

        if ( $k === $key ) {

            unset($arr[$k]);

            continue;

        }

        if ( is_array($v) ) {

            delete_key($v, $key);

        }

    }

}


delete_key($arr, 'date');


print_r(json_encode($arr, JSON_PRETTY_PRINT));

演示


查看完整回答
反对 回复 2022-12-11
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信