#sql #regex #string #regex-group #presto
#sql #регулярное выражение #строка #регулярное выражение-группа #presto
Вопрос:
Я хотел бы извлечь подстроку из длинной строки на основе шаблона. Хотите знать, каков наилучший способ ее получения?
http://abcdef?menu=xyzamp;source=pushamp;push_id=1212239617294503480amp;message_id=7658a0a6-9d31-4c3c-9aa0-9169f24e2fdc
Шаблон: 'menu'
Подстрока ищет: 'xyz'
Ответ №1:
Если ваш пример точно отражает вашу конечную цель, url_extract_parameter()
функция, вероятно, является лучшим решением, чем регулярное выражение:
SELECT url_extract_parameter('http://abcdef?menu=xyzamp;source=push', 'menu');
-- returns 'xyz'
Комментарии:
1. 1 Синтаксический анализ URL-адресов — настолько распространенная задача, что лучше доверить ее коду, специально написанному для этого.
2. Согласен с @AndyLester, что это лучшее решение, чем регулярные выражения. Приятно, что Presto предоставляет встроенную для этого функцию.
3. @DavidPhillips: было бы хорошо, если бы вы могли отредактировать свой ответ, чтобы продемонстрировать, как на самом деле использовать функцию в варианте использования OP.
Ответ №2:
В Presto DB вы должны иметь возможность использовать функцию regexp_extract()
в форме, поддерживающей захват групп:
REGEXP_EXTRACT(val, 'menu=([^amp;] )', 1)
Разбивка регулярных выражений:
menu= # litteral string 'menu='
( # beginning of capturing group number 1
[^amp;] # at least one character other than 'amp;'
) # end of capturing group number 1
Ответ №3:
Комментарии:
1. Как я могу это сделать в SQL?
2. Как я могу это сделать в SQL?
3. Вам нужно проверить, поддерживает ли ваш SQL Db engine регулярные выражения.