正则: ((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?) 解析: 此正则的核心是25[0-5]|2[0-4]\d|[01]?\d\d?,代表每一个ip段; 首先明确ip段的区间为0-255,因为正则处理有先后顺序,避免小的先满足匹配, 因此从大到小安排; a. 25开头只有250-255,因此得到25[0-5]; b. 200-249第三个数字可以为任意值,第二个数字为0-4,因此得到2[0-4]\d; c. 最后0-199可以看成000-199,可以看出,第一个数字域为0-1,第二个为0-9,第三个也为0-9, 因此得到[01]\d\d,可是还有2位数和1位数的情况,因此两位数为(删掉[01]) : \d\d,一位数为删掉([0-1]?和后面的\d?):\d,<br />因此最终为[01]?\d\d?; 各个情况相互独立,因此拼接成25[0-5]|2[0-4]\d|[01]?\d\d?,而ip前3段后面都带 有“.”,因此前3段重复,最后再加一段,“.”是特殊字符,需要转义,因此为“\.” 最终得到:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)2. 完整匹配
正则: ^((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$ 解析: 此正则将4段合并到一起,通过判断是否结束来控制ip段中的.的出现。 重点在后面($|(?!\.$)\.),此段要求当前字符要么为结束,要么不是以.结束,其后加.。 也就是说可以为ip段结束或者ip段.后面还有字符,实现效果非最后一个ip段后面才能有“.”。
未经同意禁止转载!
转载请附带本文原文地址:正则匹配IP地址,首发自 Zjmainstay学习笔记