Как использовать регулярные выражения для извлечения строки в SQL? - PullRequest
0 голосов
/ 30 марта 2020

Документация гласит:

regexp_extract(string, pattern)varchar Возвращает первую подстроку, соответствующую шаблону регулярного выражения в строке https://prestodb.io/docs/current/functions/regexp.html

У меня есть следующее query

select regexp_extract('sssshttps://jira.domain.com/browse/PR-6835hhhh',
'/(https.*\/browse\/)(\w+\-\d+)/g')

Это возвращение null, когда должно возвращаться https://jira.domain.com/browse/PR-6835 Регулярное выражение выглядит нормально, оно работает во многих инструментах регулярного выражения, которые я проверял. Почему я не могу извлечь подстроку URL-ссылки?

1 Ответ

1 голос
/ 30 марта 2020

Обратите внимание, что forward sla sh и da sh не являются метасимволами регулярных выражений, поэтому их не нужно экранировать, по крайней мере, в регулярных выражениях Presto. Рассмотрим эту версию:

select regexp_extract('sssshttps://jira.domain.com/browse/PR-6835hhhh',
                      'https.*?/browse/\w+-\d+')

Это должно вернуть:

https://jira.domain.com/browse/PR-6835

Ваше текущее регулярное выражение, похоже, исходит от другого языка, такого как JavaScript или PHP, где Литерал regex имеет разделитель /, поэтому требуется экранирование /.

Я только что отредактировал свой ответ, чтобы использовать ленивую точку .*? при сопоставлении содержимого между https и первым /browse. Это должно исправить крайний случай, упомянутый в вашем комментарии, где .* совпадает для нескольких URL.

...