регулярное выражение mysql group - PullRequest
0 голосов

Я пытаюсь получить название города из строки '{"travelzoo_hotel_name": "Выпускник Миннеаполис ", "travelzoo_hotel_id": "223", "city": "Minneapolis","страна": "США", "sales_manager": "Стивен Конти"} 'Я пробую это регулярное выражение:

SELECT REGEXP_SUBSTR('{\"travelzoo_hotel_name\":\"Graduate Minneapolis\",\"travelzoo_hotel_id\":\"223\",\"city\":\"Minneapolis\",\"country\":\"USA\",\"sales_manager\":\"Stephen Conti\"}'
,'(?:.city...)([[:alnum:]]+)');

У меня есть: '"city":"Minneapolis' Мне нужно только название города: Minneapolis.Как использовать группы в запросах?

Мой пример в regex101 Помогите мне, пожалуйста

1 Ответ

0 голосов
/ 01 июня 2018

Я предполагаю, что вы используете MySQL 8.x, который использует выражения регулярных выражений ICU .

Похоже, что строка, которую вы хотите обработать, - это JSON.Вы можете использовать JSON_EXTRACT с JSON_UNQUOTE и '$.city' в качестве пути JSON, тогда:

JSON_UNQUOTE(JSON_EXTRACT('{"travelzoo_hotel_name":"Graduate Minneapolis","travelzoo_hotel_id":"223","city":"Minneapolis","country":"USA","sales_manager":"Stephen Conti"}', '$.city'))

вернет Minneapolis.

В вашем регулярном выражении шаблон группы без захвата все еще сопоставляется и добавляется к значению соответствия.«Без захвата» означает только то, что отдельный буфер памяти не выделяется для текста, захваченного с помощью конструкции группировки.Таким образом, вы можете исправить это с помощью шаблона '(?<="city":")[^"]+', где (?<="city":") является положительным взглядом сзади, который соответствует "city":", но не помещает его в значение совпадения.Единственный текст, который вы будете иметь в выводе, - это текст, соответствующий [^"]+, 1+ символов, отличных от ".

...