regex - 匹配 DNS 主机名或 IP 地址的正则表达式?

标签 regex dns

有人有方便的正则表达式来匹配任何合法的 DNS 主机名或 IP 地址吗?

编写一个在 95% 的情况下都有效的程序很容易,但我希望得到经过充分测试的东西,以完全匹配 DNS 主机名的最新 RFC 规范。

最佳答案

您可以单独使用以下正则表达式,也可以将它们组合成一个联合 OR 表达式。

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";

ValidIpAddressRegex 匹配有效的 IP 地址和 ValidHostnameRegex 有效的主机名。根据您使用的语言,\可能必须用\进行转义。

<小时/>

ValidHostnameRegex 根据 RFC 1123 有效。本来RFC 952指定主机名段不能以数字开头。

http://en.wikipedia.org/wiki/Hostname

The original specification of hostnames in RFC 952, mandated that labels could not start with a digit or with a hyphen, and must not end with a hyphen. However, a subsequent specification (RFC 1123) permitted hostname labels to start with digits.

Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

关于regex - 匹配 DNS 主机名或 IP 地址的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/106179/

相关文章:

Facebook 对象调试器 - 无法将主机名解析为有效的 IP 地址

azure - 将 azure 托管根域指向 aws classic 负载均衡器

java - 使用正则表达式查找字符串中的所有字母

Javascript 正则表达式反向引用索引

dns - 为什么 Microsoft Edge 可以打开一些本地网站,但不能打开其他网站,这些网站的域名在主机文件中路由到 127.0.0.1

java - 如何更改 java DNS 服务提供商

postgresql - 如何将更新期间数据库争用的可能性降至最低

php - 检查字符串是否为日期的函数

regex - 如何在Notepad++ 中删除具有特定开始和结束的行的一部分?

python - 将 1 添加到与字符串中特定正则表达式匹配的数字