URL的正则表达式子字符串

时间:2020-01-20 11:43:08

标签: regex oracle oracle11g substring

我需要从url中检索一些单词:

WebViewActivity - https://google.com/search/?term=iphone_5s&utm_source=google&utm_campaign=search_bar&utm_content=search_submit

返回我想要的:

search/iphone_5s

但是我很困惑,还不太了解如何使用regexp_substr来获取数据。

我正在尝试使用此查询

regexp_substr(web_url, '\google.com/([^}]+)\/', 1,1,null,1)

仅在我尝试时返回“搜索”字词

regexp_substr(web_url, '\google.com/([^}]+)\&', 1,1,null,1)

事实证明,我得到所有单词,直到最后一个'&'

1 个答案:

答案 0 :(得分:3)

您可以使用REGEXP_REPLACE来匹配整个字符串,但要捕获两个子字符串,并用对捕获组值的两个反向引用来替换:

REGEXP_REPLACE(
    'WebViewActivity - https://google.com/search/?term=iphone_5s&utm_source=google&utm_campaign=search_bar&utm_content=search_submit',
    '.*//google\.com/([^/]+/).*[?&]term=([^&]+).*',
    '\1\2')

请参见regex demoonline Oracle demo

模式详细信息

  • .*-尽可能多的零个或多个除换行符以外的字符
  • //google\.com/-一个//google.com/子字符串
  • ([^/]+/)-捕获组1:除/以外的一个或多个字符,然后是/
  • .*-尽可能多的零个或多个除换行符以外的字符
  • [?&]term=-?&和一个term=子字符串
  • ([^&]+)-捕获第2组:&以外的一个或多个字符
  • .*-尽可能多的零个或多个除换行符以外的字符

注意:要使用此方法并在未找到匹配项的情况下得到空结果,请在正则表达式模式末尾附加|.+