正则表达式/ Redshift

时间:2015-03-13 06:11:37

标签: regex amazon-redshift

我有以下数据,我如何找到第11次':' 。我希望在第11次出现之后打印/显示信息:'。

https://www.example.com/rest/1/07/myself/urn:ads:accod:org:pki:71E4/Riken/List:abc:bcbc:hfhhf:ncnnc:shiv:hgh:bvbv:hghg

我尝试了[^]标签,但它无效。

select regexp_substr(id,'[:]{5}?.*') from tempnew;

4 个答案:

答案 0 :(得分:1)

regexp_substr不关心捕获组,因此无法计算未包含在匹配中的字符。从最后算起来会有效:

-- Returns the substring after the 6th ':' from the end.
select regexp_substr(id, '([^:]*:){5}[^:]*$') from tempnew
-- If the string does not contain 5 ':', an empty string is returned.

如果您需要从头开始计算,可以使用regexp_replace代替:

-- Returns the substring after the 11th ':'
select regexp_replace(id, '^([^:]*:){11}') from tempnew
-- If the string does not contain 11 ':', the whole string is returned.

答案 1 :(得分:0)

请参阅此演示https://regex101.com/r/wR9aU3/1

/^(?:[^:]*\:){11}(.*)$/

/^(?:.+\:){11}(.+)$/gm

https://regex101.com/r/oC5yQ6/1

答案 2 :(得分:0)

我会分开“:”并使用第11个元素。

但是如果你必须使用正则表达式:

^(?:[^:]*:){10}:([^:]*)

并使用比赛的第1组。

答案 3 :(得分:0)

你可以使用split_part来达到这个目的, 从tempnew中选择split_part(id,':',12)