我有一个带有称为URL的列的表。我正在尝试使用REGEX_SUBSTR
Redshift中的函数提取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
因此,目的是提取域名后的第一个子段
我试过了
SELECT REGEXP_SUBSTR('www.abcd.com/slug-name', '(www|www3|form)[.]abcd[.][^/]+/([^/#?]+)',1,2)
输出量
www.abcd.com/slug-name
由于您需要在模式中进行几个分组,第一个分组定义了预期的匹配上下文(因此,您不需要提取第一个分组的内容),并且REGEXP_SUBSTR
仅支持使用e
修饰符进行第一个分组的提取,因此您必须使用REGEXP_REPLACE
。
请注意:REGEXP_REPLACE
删除匹配项,如果字符串不匹配,它将保持原样。REGEXP_SUBSTR
将返回一个空白值。
因此,您可以考虑
REGEXP_REPLACE('www.abcd.com/slug-name', '^(www3?|form)\\.abcd\\.[^/]+/([^/#?]+).*', '$2')
或者,要删除“不匹配条目”文本(请注意最后|.+
添加的内容):
REGEXP_REPLACE('www.abcd.com/slug-name', '^(www3?|form)\\.abcd\\.[^/]+/([^/#?]+).*|.+', '$2')
所以,^(www3?|form)\\.abcd\\.[^/]+/([^/#?]+).*
比赛
^
-字符串开始(www3?|form)
-第1组:www
和一个可选3
\.abcd\.
-.abcd.
子串[^/]+
-1个以上字符 /
/
-一个/
字符([^/#?]+)
-第2组(经由被称为$2
在替换模式反向引用):比其它1个或多个字符/
,#
一个?
.*
-尽可能多的0个字符该|.+
说“或任何1+字符”。也就是说,如果第一个替代项没有找到匹配项,则删除整个文本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句