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



说到正则表达式,我是个新手。我有一个包含时间戳的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实际上可以帮助查找所有匹配的事件,但是,我发现在构建模式时遇到了困难,尤其是我的模式包含逗号和双引号。

Regex(或任何其他字符串函数(不是编辑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));

演示

相关内容

最新更新