regex 正则表达式,用于提取URL中从常量开始位置到下一个斜杠或字符串结尾之间的文本

lnvxswe2  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(94)

尝试使用Snowflake的REGEX_SUBSTR()函数提取文本。我有一个使用CASEWHEN来处理不同场景的工作解决方案,但如果存在的话,我希望有一个更干净的解决方案
以下是三种可能的场景和我们想要提取的文本:

  1. https://someDomain.com/constant-string/EXTRACT
  2. https://someDomain.com/constant-string/EXTRACT/someOtherText
  3. https://someDomain.com/constant-string/EXTRACT/someOtherText/someOtherText/…/someOtherText
    在这三种情况下,域可以改变,反斜杠的数量可以改变,但常量字符串将始终相同,我总是想提取紧跟在常量字符串之后的文本,直到下一个反斜杠,或者在没有其他反斜杠的情况下,直到最后。问题是,由于反斜杠的数量可以改变,并且URL并不总是以反斜杠结尾,因此我不得不使用三个不同的REGEX_SUBSTR()函数来实现这一点-这很好,但是要寻找一个单行的REGEX_SUBSTR()解决方案,
    以下是我目前的解决方案:
WHEN CONTAINS(REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2), '/') THEN REGEXP_SUBSTR(url, '(constant-string/)(.*)(/.*?)/', 1, 1, 'e', 2)
           WHEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2) IS NOT NULL THEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2)
           WHEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2) IS NULL THEN REGEXP_SUBSTR(url, '(constant-string/)(.*)(/|$)', 1, 1, 'e', 2)
           ELSE 'None of These'
xqkwcwgp

xqkwcwgp1#

1.将斜杠上的URL拆分为数组
1.在数组中找到常量字符串
1.获取数组中的下一个值

select split('https://someDomain.com/constant-string/EXTRACT/someOtherText','/') ary,
array_position('constant-string'::variant, ary) index,
get(ary, index+1)::string extract;

| ARY|指数|提取物|
| --|--|--|
| [“https:“,"",”someDomain.com“,“constant-string”,“EXTRACT”,“somewhere Text”]| 3 |提取物|

相关问题