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

时间:2019-04-15 14:07:42

标签: regex regex-negation

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

我发现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

有没有办法做到这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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})