正则表达式用于查找句子中的域而不是IP地址

问题描述 投票:1回答:2

我正在尝试编写一个与句子中的域匹配的正则表达式。

我发现this post非常有用,并帮助我创建以下匹配域,但它也不幸地匹配IP地址,我不想要:

((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\._-]{1,61}|[a-z0-9-]{1,30})

我想更新我的表达式,以便仍然可以找到以下内容:在句子中,括号之间等:

www.example.com
subdomain.example.com
subdomain.example.co.uk

但不是:

192.168.0.0
127.0.0.1

有没有办法做到这一点?

regex regex-negation
2个回答
2
投票

我们可以使用一个简单的前瞻,只排除数字和点的组合:(?![\d.]+)

(?![\d.]+)((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\._-]{1,61}|[a-z0-9-]{1,30})

Demo


0
投票

来自@ wp78de的答案是正确的,但它不会检测以数字数字开头的域,即123reg.com

所以从正则表达式中删除第一个组就像这样

((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\._-]{1,61}|[a-z0-9-]{1,30})
© www.soinside.com 2019 - 2024. All rights reserved.