Как можно рекурсивно получить значение с помощью регулярного выражения, где значение является частью повторяющейся группы?
У меня есть сериализованный массив в базе данных mysql. Это 3 примера сериализованного массива
a:2:{i:0;s:2:"OR";i:1;s:2:"WA";}
a:1:{i:0;s:2:"CA";}
a:4:{i:0;s:2:"CA";i:1;s:2:"ID";i:2;s:2:"OR";i:3;s:2:"WA";}
a: 1 обозначает массив: {число элементов}, затем между {} i: 0 означает элемент 0, i: 1 означает элемент 1 и т. Д., Тогда фактическое значение s: 2: «CA» означает строку с длиной2
, поэтому у меня есть 2 элемента в первом массиве, 1 элемент во втором и 4 элемента в последнем
У меня есть эти данные в базе данных MySQL, и у меня нет опции для анализаэто с внутренним кодом - это должно быть сделано в mysql (10.0.23-MariaDB-log)
повторяющийся шаблон находится внутри фигурных скобок, число повторов является переменным(как в 3 примерах каждый имеет различное количество повторяющихся шаблонов), количество повторяющихся шаблонов определяется числом в 3-м пosition (если это поможет)
для первого примера это: 2 : и поэтому есть 2 повторяющихся блока:
i: 0; s: 2: " ИЛИ";
i: 1; s: 2:" WA";
Я только хочу извлечь значения в полужирный
Итак, я придумала это регулярное выражение ^a:(?:\d+):\{(?:i:(?:\d+);s:(?:\d+):\"(\w\w)\";)+}$
, оно фиксирует значения, которые я хочу, все в порядке, но проблема в том, что оно захватывает только последнее в каждой повторяющейся группе
Вернемся к примеру: 1053 *
- WA
- CA
- WA
Что бы я хотелхотеть это
- ИЛИ | WA
- CA
- CA | ID | ИЛИ | WA
это специфичные для языка функции регулярных выраженийдоступны для меня:
https://mariadb.com/kb/en/library/regular-expressions-functions/
Мне все равно, какой из них используется для решения проблемы
В конечном счете, мне нужно это в разумной форме, которая может быть представленаклиенту, например, CA, ID, ИЛИ или CA | ID | ИЛИ
Текущие мысли, возможно, это невозможно ви я должен написать многошаговую функцию, в которой
- извлекает повторяющуюся часть между фигурными скобками
- , а затем каким-то образом перебирает каждую повторяющуюся часть
- затем используйте регулярные выражения для каждого
- , затем возвращайте результаты в виде одной строки с разделенными элементами