对于0到255之间的数字,我使用以下正则表达式:
(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))
上述正则表达式将匹配从0到255之间的整数,但不匹配256。
因此,对于IPv4,我使用以下正则表达式:
^(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})$
这个结构是:^(N)((\.(N)){3})$
,其中 N 是用于匹配从0到255的数字的正则表达式。
这个正则表达式将匹配以下格式的IP地址:
0.0.0.0
192.168.1.2
但不包括以下内容:
10.1.0.256
1.2.3.
127.0.1-2.3
对于IPv4 CIDR(无类域间路由选择)我使用这个正则表达式:
^(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))$
这个表达式的结构是:^(N)((\.(N)){3})\/M$
其中 N 是用于匹配 0 到 255 范围内的数字的正则表达式,而 M 是用于匹配 0 到 32 范围内的数字的正则表达式。
此正则表达式将匹配以下 CIDR:
0.0.0.0/0
192.168.1.2/32
但不包括下面这些:
10.1.0.256/16
1.2.3./24
127.0.0.1/33
对于类似于"10.0.0.0/16", "192.168.1.1/32"
的IPv4 CIDR列表,我使用以下正则表达式:
^("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))")((,([ ]*)("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))"))*)$
正则表达式如下所示:^(“C”)((,([ ]*)(“C”))*)$
其中 C 是用于匹配 CIDR(如0.0.0.0/0)的正则表达式。
此正则表达式将匹配以下CIDR列表:
“10.0.0.0/16”,”192.168.1.2/32”, “1.2.3.4/32”
但不包括以下内容:
“10.0.0.0/16” 192.168.1.2/32 “1.2.3.4/32”
也许它可能会变短,但对我来说很容易理解,所以对我来说没问题。
希望这有帮助!