确定适用的 IP 地址
问题中的IP地址范围很混乱,意图可能是:
10.130.1.0 - 10.130.128.99
10.132.1.0 - 10.132.128.1
这个答案是基于这种情况的假设 - 我已经阅读了关于只想将范围应用于第三个八位字节的评论,但很可能这是一个误解(或者这确实是意图 - 但不太可能是所以对于任何未来的读者)。
作为正则表达式
IP范围可以表示为:
10.130.1.0 - 10.130.127.254*
10.130.128.0 - 10.130.128.99
10.132.1.0 - 10.132.127.254*
10.132.128.0 - 10.132.128.1
请注意,标有星号的两个范围涵盖了最后一个八位字节的整个范围,因此在模式中任何数字都符合条件。因此在伪正则表达式中需要的是:
10.130.[1 to 127].*
10.130.128.[0 to 99]
10.132.[1 to 127].*
10.132.128.[0 or 1]
每个范围都需要是处理组成这些数字的数字的正则表达式。
1 至 127
有 1 到 3 位数字,使用正则表达式处理时会有些复杂 - 但是可以这样分解:
[1-9] # 1-9
[0-9]{2} # 10-99
1[0-1][0-9] # 100 - 119
12[0-7] # 120-127
或者:
([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])
0 到 99
这很容易,因为它是一位或两位数:
[0-9]{1,2}
0 或 1
也很容易:
[0-1]
全部一起:
因此,作为一个完整的正则表达式,整个范围可以表示为:
^10\.(
130\.([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
130\.128\.[0-9]{1,2} |
132\.([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
132\.128\.[0-1]
)$
请注意,将正则表达式锚定到字符串的末尾是个好主意,否则是一个 IP 地址,例如
10.130.128.111
^^^^^^^^^^^^^
超出定义范围的将匹配,最后一个数字被忽略。
简化假设
Google 不太可能提交无效的 IP 地址,因此可以对上述正则表达式进行一些简化 -[0-9]
并且[1-9]
可以同等对待,这意味着:
[1-9] # 1-9
[0-9]{2} # 10-99
变成:
[0-9]{1,2} # 1-99, one or two digits
因此,正则表达式可以表示为稍微简单一些:
^10\.(
130\.([0-9]{1,2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
130\.128\.[0-9]{1,2} |
132\.([0-9]{1,2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
132\.128\.[0-1]
)$
此外,[0-9]
可以写成\d
这样使得正则表达式稍微不那么冗长::
^10\.(
130\.(\d{1,2}|1[0-1]\d|12[0-7])\.\d{1,3} |
130\.128\.\d{1,2} |
132\.(\d{1,2}|1[0-1]\d|12[0-7])\.\d{1,3} |
132\.128\.[0-1]
)$