【发布时间】:2019-11-20 07:34:58
【问题描述】:
我有一个名为 URL 的列的表。我正在尝试使用 Redshift 中的REGEX_SUBSTR 函数提取 URL 的不同部分。
URL Expected_output
------------
www.abcd.com/first-name | first-name
www.abcd.com/another-name/some-details/other | another-name
www3.abcd.com/some-name/ | some-name
form.abcd.com/another-first-name | another-first-name
所以目的是提取域名后的第一个slug
我试过了SELECT REGEXP_SUBSTR('www.abcd.com/slug-name', '(www|www3|form)[.]abcd[.][^/]+/([^/#?]+)',1,2)
输出www.abcd.com/slug-name
【问题讨论】:
-
如果你使用
REGEXP_SUBSTR('www.abcd.com/slug-name', '[^/]+',1,2)会怎样?还是只需要在特定上下文中匹配? -
请提供有关您希望匹配发生的确切上下文的反馈,这很重要,因为此正则表达式引擎似乎不支持非捕获组。你需要检查
(www|www3|form)吗? -
是的,我需要检查这是一个以
www|www3|form开头的有效网址 -
那么我认为你不能使用
REGEXP_SUBSTR,因为它只能提取 first 捕获组的内容,其他的被忽略,因为它使用 POSIX 正则表达式标准,不支持非捕获组。您需要使用两步解决方案。 -
知道了。 2 步是指使用 UDF 吗?
标签: regex amazon-redshift