在PLSQL中提取URL路径段字符串

时间:2017-05-08 21:30:10

标签: string plsql oracle-sqldeveloper

我在一个字段(URL_FIELD)中有一个包含完整网址的表格,我想提取网址的路径段。以下是一个URL(表中的一个单元格)的示例:

https://www1.ncdc.noaa.gov/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt

我想要的部分是/pub/data/test/paleocean/sediment_files/complete/

到目前为止,我有:

SELECT SUBSTR(URL_FIELD, INSTR(URL_FIELD, '/pub', -1)) AS PATH_NAME FROM EG_VAR_UPLOAD_TEST;

返回

/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt

所以我需要在最后的正斜杠(nantuck-tab.txt)之后删除该部分。我认为将当前SUBSTR()函数嵌套到另一个SUBSTR()函数中可以解决这个问题,尽管我一直对所有嵌套参数感到困惑。请记住每个URL的最终正斜杠后面的部分,/pub之前的部分(有时)也是如此。

2 个答案:

答案 0 :(得分:1)

使用REGEX_SUBSTR您可以尝试如下: 我假设only final forward slash varies for each URL and so does the section preceding /pub

  SELECT REGEXP_SUBSTR (URL_FIELD, '/pub.*/') AS PATH_NAME
      FROM EG_VAR_UPLOAD_TEST;  

见demo:

  SQL> SELECT REGEXP_SUBSTR (
                      'https://www1.ncdc.noaa.gov/pub/data/test/palaeocean/sedimeant_files/complete/nantuck-tab.txt'
                      ,'/pub.*/')
                      AS PATH_NAME
              FROM DUAL    
       /

    PATH_NAME
    --------------------------------------------------
    /pub/data/test/palaeocean/sedimeant_files/complete

    SQL> SELECT REGEXP_SUBSTR (
                      'https://www1.ncdc.noaa.gov/pub/datttta/test/palaeocean/sedimeant_files/complete/nanttttuck-tab.txt'
                      ,'/pub.*/')
                      AS PATH_NAME
              FROM DUAL    
        /

    PATH_NAME
    -----------------------------------------------------
    /pub/datttta/test/palaeocean/sedimeant_files/complete

    SQL> 

答案 1 :(得分:1)

select regexp_substr('https://www1.ncdc.noaa.gov/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt', '^https?://[^/]+(.*/)[^/]+$', 1, 1, null, 1)
from dual;

正则表达式的解释:

  • ^http在开始时匹配“http”
  • s?与“https”中的可选“s”匹配,
  • ://与“http”/“https”
  • 后面的“://”匹配
  • [^/]+匹配“://”,
  • 之后的任意数字非“/”字符
  • .*/匹配以“/”结尾的任意数量的任意字符,而围绕它的括号将其标记为“subexpression#1”,
  • [^/]+$匹配任意匹配任意数字的非 - “/”字符。

然后,regexp_substr()函数的后续参数是:

  • 1是“从位置1开始”,
  • 1是“首次出现正则表达式”,
  • null是“没有正则表达式处理的修饰符”,
  • 1是“返回子表达式#1”,它指的是实际正则表达式中定义的子表达式#1(见上文)。