我有一个包含网站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)
我想摆脱/.我怎么做?
用这个 :
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)
感谢答案中的提示,我终于成功了!
我现在使用的代码如下所示:
REGEXP_REPLACE(website_url, '(http[s]?://)?(www\.)?(.*?)((/|:)(.)*|$)', '\3')
Run Code Online (Sandbox Code Playgroud)
谢谢大家的帮助!