从Oracle SQL中的URL获取域

Foa*_*aly 1 regex sql oracle

我有一个包含网站URL的数据库.从那些URL我想提取域名.这是两个(安静的不同)示例:

http://www.example.com       -> example.com
example.co.uk/dir/index.html -> example.co.uk
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我使用正则表达式和Oracle提供的函数REGEXP_SUBSTR和REGEXP_REPLACE.我使用replace来替换前面的http[s]www.用空字符串(删除它).然后我使用substring来获取开头和第一个之间的字符串,/或者如果没有/整个字符串.我的代码看起来像这样:

REGEXP_SUBSTR(REGEXP_REPLACE(website_url, '^http[s]?://(www\.)?|^www\.', '', 1), '(.+?)(/|$)')
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,除了我的正则表达式无法排除/:

example.com/dir/index.html -> example.com/
Run Code Online (Sandbox Code Playgroud)

我想摆脱/.我怎么做?

San*_*San 6

用这个 :

WITH tab AS 
 (SELECT 'https://www.example.co.uk/dir/index.html' AS website_url 
    FROM dual)
SELECT REGEXP_SUBSTR(REGEXP_REPLACE(website_url, '^http[s]?://(www\.)?|^www\.', '', 1), '\w+(\.\w+)+') 
  FROM tab;
Run Code Online (Sandbox Code Playgroud)

输出:

|REGEXP_SUBSTR(REGEXP_REPLACE(W|
--------------------------------
|example.co.uk                 |
Run Code Online (Sandbox Code Playgroud)


Foa*_*aly 5

感谢答案中的提示,我终于成功了!

我现在使用的代码如下所示:

REGEXP_REPLACE(website_url, '(http[s]?://)?(www\.)?(.*?)((/|:)(.)*|$)', '\3')
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助!