PHP Regex для поиска и замены всех вхождений строки, которая начинается и заканчивается определенными символами - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок ie, когда дело доходит до регулярных выражений. У меня есть строка 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 Ответ

1 голос
/ 08 апреля 2020

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));

demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...