Извлечение подстроки из строки с использованием шаблона

#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:

Это сделает:

 menu=([^amp;] )
  

Вы можете проверить это здесь

Комментарии:

1. Как я могу это сделать в SQL?

2. Как я могу это сделать в SQL?

3. Вам нужно проверить, поддерживает ли ваш SQL Db engine регулярные выражения.