互联网上的主机名称一般由单词字符和字符.组成,如myhost.com、wname.net、123.cn等。
主机名称被字符.分割,被分割的每一个字符串由单词字符组成,但是字符-不能是该字符串的第一个字符或者最后一个字符。另外,被分割后的每一个字符串最大长度为63、最小长度为1。以下正则表达式能够验证被分割后的每一个字符串。其中,长度为1的字符串由表达式[a-zA-Z0-9]匹配,长度大于1的字符串由表达式[a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])匹配。
([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9] (56)
正则表达式(56)解释:
[a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。
/w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。
使用上述正则表达式,可以扩展为验证主机名称的正则表达式。以下正则表达式能够简单验证主机名称。
(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]) (57)
正则表达式(57)解释:
[a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。
/w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。
/.匹配字符.。
(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*可以匹配至少重复“被分割后的每一个字符串+字符.”0次的字符串。
使用工具Regex Tester测试正则表达式(57),结果如图所示。
然而,在目前网络的主机名称中,被分割后的最后一个字符串是有限的,而不是由单词字符串组成的任意字符串。如com、edu、gov、millnet、org、net、cn等。正则表达式(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9])仅仅能够简单验证主机名称。以下正则表达式能够精确验证主机名称。
(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z][a-z]) (58)
正则表达式(58)解释:
[a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。
/w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。
/.匹配字符.。
(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*可以匹配至少重复“被分割后的每一个字符串+字符.”0次的字符串。
com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z][a-z]可以匹配给定的字符串(如com、edu、gov、millnet、org、net等)或者由字母组成的长度为2的字符串。
使用工具Regex Tester测试正则表达式正则表达式(58),结果如图所示。