使用模式从字符串中提取子字符串

时间:2019-03-13 23:51:02

标签: sql regex regex-group presto

我想基于模式从冗长的字符串中提取子字符串。想知道获得它的最佳方法是什么?

http://abcdef?menu=xyz&source=push&push_id=1212239617294503480&message_id=7658a0a6-9d31-4c3c-9aa0-9169f24e2fdc

模式:'menu'

寻找以下子字符串:'xyz'

3 个答案:

答案 0 :(得分:4)

如果您的示例准确地代表了您的最终目标,那么url_extract_parameter()函数可能是比正则表达式更好的解决方案:

SELECT url_extract_parameter('http://abcdef?menu=xyz&source=push', 'menu');
-- returns 'xyz'

答案 1 :(得分:3)

在Presto DB中,您应该可以使用function regexp_extract(),其格式支持捕获组:

REGEXP_EXTRACT(val, 'menu=([^&]+)', 1)

正则表达式细目:

menu=        # litteral string 'menu='
(            # beginning of capturing group number 1
  [^&]+          # at least one character other than '&'
)            # end of capturing group number 1

答案 2 :(得分:0)

这可以做到:

menu=([^&]+)

您可以here

检查它