用于从通用名称查找域的 SQL 正则表达式

发布于 2024-12-11 05:35:44 字数 258 浏览 0 评论 0原文

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

sub1.domain.com
域名.com
sub1.sub2.domain.com
*.domain.com

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



Oracle 中有一种方法/正则表达式可以帮助我从字符串中提取域名 - “domain.com”。我一直在尝试一些正则表达式但它没有成功。 感谢您的帮助

I have the following sample data set in one of my tables:

sub1.domain.com

domain.com

sub1.sub2.domain.com

*.domain.com

Updated
Also including ccTLD

*.domain.co.uk

is there a way/regex in Oracle that can help me extract just the domain name - "domain.com" from the string.I have been trying a few regexes but it dint work out.
Thanks for the help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情归归情 2024-12-18 05:35:44

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

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

在 SQL 中,这给出了:

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

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

要获取域名和 TLD:

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

考虑 co.uk

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

REGEXP
------
domain

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

要获取域名和 TLD:


考虑 co.uk


, '\1') from dual;

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

考虑 co.uk


, '\1') from dual;

REGEXP
------
domain

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

要获取域名和 TLD:

考虑 co.uk

, '\1') from dual; REGEXP_REPLA ------------ domain.co.uk , '\1') from dual; REGEXP ------ domain

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

要获取域名和 TLD:

考虑 co.uk

, '\1') from dual; REGEXP_REP ---------- domain.com

考虑 co.uk

, '\1') from dual; REGEXP ------ domain

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

要获取域名和 TLD:

考虑 co.uk

You could use the following regex matching something_without_a_dot.something_without_a_dot from the end of the string. You'll get the answer in the first group. If you need the TLD also, you can enclose everything in () except the $.

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

In SQL, that gives:

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

The non-greedy .*? at the start allows you to ignore the start of the string.

To get the domain name plus the TLD:

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

To take into account co.uk:

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

REGEXP
------
domain

The non-greedy .*? at the start allows you to ignore the start of the string.

To get the domain name plus the TLD:


To take into account co.uk:


, '\1') from dual;

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

To take into account co.uk:


, '\1') from dual;

REGEXP
------
domain

The non-greedy .*? at the start allows you to ignore the start of the string.

To get the domain name plus the TLD:

To take into account co.uk:

, '\1') from dual; REGEXP_REPLA ------------ domain.co.uk , '\1') from dual; REGEXP ------ domain

The non-greedy .*? at the start allows you to ignore the start of the string.

To get the domain name plus the TLD:

To take into account co.uk:

, '\1') from dual; REGEXP_REP ---------- domain.com

To take into account co.uk:

, '\1') from dual; REGEXP ------ domain

The non-greedy .*? at the start allows you to ignore the start of the string.

To get the domain name plus the TLD:

To take into account co.uk:

久夏青 2024-12-18 05:35:44

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

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

While I was typing my answer the guy above gave a good regex. I'm thinking you could use REGEXP_REPLACE in your select statement.

REGEXP_REPLACE(fieldname, '([^.]+)\.([^.]+)
, '\1\.\2') as fieldname
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文