SQL Regex用于从通用名称查找域

时间:2011-10-20 18:54:35

标签: sql regex oracle

我在其中一个表中有以下示例数据集:

sub1.domain.com
domain.com
sub1.sub2.domain.com
* .domain.com

更新
还包括ccTLD
* .domain.co.uk



在Oracle中是否有一种方法/正则表达式可以帮助我从字符串中提取域名 - “domain.com”。我一直在尝试一些正则表达式,但它可以解决问题。 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式匹配字符串末尾的something_without_a_dot.something_without_a_dot。你会得到第一组的答案。如果您还需要TLD,则可以将()中的所有内容括在$之外。

([^.]+)\.[^.]+$

在SQL中,它给出了:

SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+)\.[^.]+$', '\1') from dual;

REGEXP
------
domain

开头的非贪婪.*?允许您忽略字符串的开头。

获取域名加TLD:

SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+\.[^.]+)$', '\1') from dual;

REGEXP_REP
----------
domain.com

考虑co.uk

SQL> select regexp_replace('sub1.sub2.domain.co.uk', '^.*?([^.]+\.(co\.uk|[^.]+))$', '\1') from dual;

REGEXP_REPLA
------------
domain.co.uk

答案 1 :(得分:0)

当我输入我的答案时,上面的那个人给了一个很好的正则表达式。我想你可以在你的select语句中使用REGEXP_REPLACE。

REGEXP_REPLACE(fieldname, '([^.]+)\.([^.]+)$', '\1\.\2') as fieldname