15.12.如何通过子表达式来验证IP 地址是否有效呢?

15.12.1 问题
如何在一个文本中, 寻找一些有效的IP 地址呢?
15.12.2 解决办法
可以使用子表达式去验证IP 地址中的每个3 位数组是否有效。
15.12.3 讨论
根本上一章(章节15.11)所学习过的内容, 一个包含1 位和3 位数目字的IP 地址可以用”\d”标记来匹配的。
\d{1,3}
如果你想为3 组包含1 和4 位数的数组进行匹配, 可以这样做:
(\d{1,4}){3}
就如”/d{3}”可以用来匹配”333”一样, 你可以通过创建子表达式来进行匹配。子表达式本身就是一个独立的元素, 跟表达中其他的模式有着相同的地位。比如说一个IP 地址, 当中包含着4 组3 位数的数组。你可以把它分成3 组3 位数组跟1 组3 位数组来处理, 这样做会比较方便:
(\d{1,3}\.){3}\d{1,3}
可是, 这个方法是有问题的, 它给返回一个像这样子的字符串: 838.381.28.999, 而非一个有效的IP 地址。要解决这个问题, 你需要把每个3 位数组的最大值限制为255。通过使用子表达式, 可以这样做:
代码如下:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
首先, 先对代码的前面部分中作个深入的了解:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}
在这段代码中, 你会看到4 个主要部份:
(\d{1,2}) 表示包含着”1”或者”2”的数字或者
(1\d{2}) 表示“1”随后跟着两个数目或者
(2[0-4]\d) 表示“2” 随后跟着两个”0 至4” 范围内的数字或者
(25[0-5]) 表示“25” 随后跟着1 个”0 至5” 范围内的数位
最后”\.”及{3}代表包含着3 组根据以上规则的数组并以”.”号分隔。

最后还有一组子表达式代表着第4 组数组:
((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
它跟之前的表达式很相似, 只是去除了尾端的”.”号。这是由于一个正确的IP 地址(例如:
192.168.0.1), 尾端的是没有”.”号的。

以下是一些有关子表达式的语法功能:
{n}代表最少执行n 次。
{n,m}代表最少执行n 次但不多于m 次。

加支付宝好友偷能量挖...


评论(0)网络
阅读(110)喜欢(0)flash/flex/fcs/AIR