正则表达式:如何扩展域名的正则表达式以包含 a.b.c.d 类型的域?
Regex: How to expand regex for domain name to include domains of type a.b.c.d?
以下正则表达式提取大多数格式为 mail.example.com
的邮件服务器名称
([a-zA-Z0-9-]+\.{1,}[a-zA-Z0-9-]+\.[a-zA-Z0-9-]{2,})
如图here.
我们如何扩展它,使其与一个(或多个)附加子域相匹配,例如
b-app05-06.boldchat.com
ns126a.ba1.enops.net
NHQSDFEXCHUB01.nam.coair.com
ncsmcexchub01.nam.coair.com
您可以将最后一个子模式包含在非捕获组中并设置一个 +
量词:
\b[\w-]+(?:\.[\w-]+){2,}\b
解释:
\b
- 字边界
[\w-]+
- 匹配字母数字或连字符 的字符 class
(?:\.[\w-]+){2,}
- 匹配 2 个或多个文字点序列和 1 个或多个字母数字字符或连字符的非捕获组
\b
- 字边界
见demo
你可以做得更短:
((?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]{2,})$
首先,这是匹配一个域的方法(根据您的示例):
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*
顶级域名匹配:
[a-z]{2,}
现在,您可以使用点分隔多个域,然后是顶级域名:
((?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)+[a-z]{2,})
如果您需要匹配由至少 2 个子域 + tld 组成的域:
((?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.){2,}[a-z]{2,})
如果您的引擎支持正则表达式递归,您可以利用它(通常是 PCRE 兼容引擎)Demo here
此正则表达式适用于任意数量的子域,并允许您捕获内部域。
(([\w-]+)[.](\w{2,}$|(?1)))
详情:
(([\w-]+)[.]
开始整个递归捕获,然后开始捕获最左边的子域,后跟一个点。
(\w{2,}$|(?1)))
交替,尝试匹配tdl(匹配结束)或重复模式。
您的主机在第二个捕获组中,它的域在第三个捕获组中。以及第一个捕获组中的整个匹配项(请参阅演示中的替换窗格)
以下正则表达式提取大多数格式为 mail.example.com
的邮件服务器名称([a-zA-Z0-9-]+\.{1,}[a-zA-Z0-9-]+\.[a-zA-Z0-9-]{2,})
如图here.
我们如何扩展它,使其与一个(或多个)附加子域相匹配,例如
b-app05-06.boldchat.com
ns126a.ba1.enops.net
NHQSDFEXCHUB01.nam.coair.com
ncsmcexchub01.nam.coair.com
您可以将最后一个子模式包含在非捕获组中并设置一个 +
量词:
\b[\w-]+(?:\.[\w-]+){2,}\b
解释:
\b
- 字边界[\w-]+
- 匹配字母数字或连字符 的字符 class
(?:\.[\w-]+){2,}
- 匹配 2 个或多个文字点序列和 1 个或多个字母数字字符或连字符的非捕获组\b
- 字边界
见demo
你可以做得更短:
((?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]{2,})$
首先,这是匹配一个域的方法(根据您的示例):
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*
顶级域名匹配:
[a-z]{2,}
现在,您可以使用点分隔多个域,然后是顶级域名:
((?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)+[a-z]{2,})
如果您需要匹配由至少 2 个子域 + tld 组成的域:
((?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.){2,}[a-z]{2,})
如果您的引擎支持正则表达式递归,您可以利用它(通常是 PCRE 兼容引擎)Demo here
此正则表达式适用于任意数量的子域,并允许您捕获内部域。
(([\w-]+)[.](\w{2,}$|(?1)))
详情:
(([\w-]+)[.]
开始整个递归捕获,然后开始捕获最左边的子域,后跟一个点。(\w{2,}$|(?1)))
交替,尝试匹配tdl(匹配结束)或重复模式。
您的主机在第二个捕获组中,它的域在第三个捕获组中。以及第一个捕获组中的整个匹配项(请参阅演示中的替换窗格)