У меня есть эта строка значений (PHP Сериализованный объект) из запроса sql, который отформатирован как словарь (hashmap), и я пытаюсь использовать регулярное выражение для удаления определенных символов, чтобы соответствовать указанному формату c но у меня были некоторые проблемы с этим.
String (я нажал enter, чтобы он выглядел читабельно здесь):
a:2:{s:5:"years";a:3:{i:2018;a:5:{s:6:"metric1";d:0.9358;s:5:"metric2";
i:8930;s:8:"metric4";i:6523;s:16:"metric3";i:63;s:12:"metric5";
i:48;}i:2019;a:5:{s:6:"metric1";d:0.845360824;
s:5:"metric2";i:5516;s:8:"metric4";i:4664;s:16:"metric3";i:57;
s:12:"metric5";i:41;}i:2020;a:5:{s:6:"metric1";
d:1;s:5:"metric2";i:3093;s:8:"metric4";i:3093;s:16:"metric3";i:4;s:12:"metric5";i:3;}}s:8
:"all_time";a:5:{s:5:"metric2";i:14548;s:16:
"metric3";i:124;s:12:"metric5";
i:92;s:6:"metric1";d:0.8679245;s:8:"metric4";i:12627;}}
То, что я до сих пор пробовал, это (a{1}:\d:s{1}:\d:)|(i;)|i:|(s:\d+)|\bd\b|(a:\d)|;
Что производит
:{:"years":{2018:{:"metric1":0.9358:"metric2"
8930:"metric4"6523:"metric3"63:"metric5"
48}2019:{:"metric1":0.845360824
:"metric2"5516:"metric4"4664:"metric3"57
:"metric5"41}2020:{:"metric1"
:1:"metric2"3093:"metric4"3093:"metric3"4:"metric5"3}}
:"all_time":{:"metric2"14548:
"metric3"124:"metric5"
92:"metric1":0.8679245:"metric4"12627}}
То, что я хочу (усечено)
{'years': {'2018': {
'metric1': 0.9358,
'metric2': 8930,
'metric3': 63,
'metric4': 6523 },
{'2019': {
.
.
. }
'all_time': {'metric1': 0.867, 'metric2':14548, 'metric3':124, 'metric5':92, 'metric4': 12627}
}