范例 |
正则表达式范例 |
数字范围 |
浮点数 |
电子邮件地址 |
IP 地址 |
有效的日期 |
数字日期转文本 |
信用卡号码 |
比对完整行 |
删除重复行 |
编程 |
两个相近的字词 |
陷阱 |
灾难性回溯 |
过多重复 |
阻断服务攻击 |
让所有内容都可选 |
重复捕获组 |
混合 Unicode 和 8 比特 |
更多本网站信息 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式范例 |
正则表达式参考 |
替换字符串参考 |
如何寻找或验证 IP 地址
比对 IP 地址是正则表达式复杂度和精确度之间权衡取舍的另一个好范例。 \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
会完美比对任何 IP 地址。但也会比对 999.999.999.999
,好像它是一个有效的 IP 地址。如果你的正则表达式版本支持 Unicode,它甚至可能会比对 ١٢٣.१२३.೧೨೩.๑๒๓
。这是否会造成问题,取决于你打算套用正则表达式的文件或数据。
限制和截取 IP 地址的四个数字
若要将 IP 地址中的所有 4 个数字限制在 0 到 255 之间,你可以使用下列正则表达式。它会将 IP 地址的 4 个数字保存到 捕获组 中。你可以使用这些群组进一步处理 IP 号码。自由间距模式 允许它符合页面宽度。
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
上述正则表达式允许数字 10 到 99 有 1 个前导零,数字 0 到 9 有 2 个前导零。严格来说,具有前导零的 IP 地址表示八进位表示法。因此,您可能想要禁止前导零。这需要一个稍长的正则表达式
\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b
限制四个 IP 地址数字而不截取它们
如果您不需要访问个别数字,您可以使用 量词 将上述 3 个正则表达式缩短为
\b(?:\d{1,3}\.){3}\d{1,3}\b
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}
(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b
检查用户输入
上述 regex 使用 字词边界 来确保 IP 地址中的第一个和最后一个数字不是字母数字字符串行中的一部分。这些 regex 适用于在较长的字符串中寻找 IP 地址。
如果您想要验证用户输入,确保字符串仅包含 IP 地址,则需要将字词边界替换为 字符串开头和字符串结尾锚点。如果您的 regex 风格支持,可以使用专用的锚点 \A
和 \z
\A(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\z
如果不是,您必须使用 ^
和 $
,并确保它们在断行处比对的选项已关闭
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$