正则表达式 PCRE2 验证 ip 地址范围

Regex PCRE2 verify range of ip address

目前我正在研究用 PCRE2 编写的正则表达式来检查 IP 地址范围

^(10\.).+|(172\.16).+|(192\.168).+

我还需要正则表达式来检查是否可以在字符串中找到 172.16.X.X - 172.31.X.X[= 之间的任何 ip 13=]

当前的正则表达式它正在工作,但没有专门检查这个范围......它正在捕获 172.16.X.X

的所有内容

我试过^(10\.).+|(172\.[16-31]).+|(192\.168).+,但这种方法行不通。

另外我正在使用 https://regex101.com/ 来调试这个表达式...这是检查它是否正确的好方法吗?

你可以使用

\b(?:(?:192\.168|172(?:\.(?:1[6-9]|2\d|3[01])))(?:\.\d{1,3}){2}|10(?:\.\d{1,3}){3})\b
  • \b 防止部分单词匹配的单词边界
  • (?:非捕获组
    • (?:非捕获组
      • 192\.168匹配192.168
      • |
      • 172(?:\.(?:1[6-9]|2\d|3[01])) 匹配 172. 然后 16 直到 31
    • ) 关闭非捕获组
    • (?:\.\d{1,3}){2}匹配2次.和1-3位
    • |
    • 10(?:\.\d{1,3}){3}匹配10和3次.和1-3位
  • )关闭非捕获组
  • \b一个单词边界

Regex demo

如果你想让\d{1,3}位更具体,那么你也可以使用:

(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)