正则表达式——IP地址的匹配
2017-06-01 00:49
253 查看
我在中国大学MOOC上学习正则表达式的时候,在学习IP地址的匹配的时候,发现了视频里的匹配IP地址的正则表达式是错误的
IPV0地址分四段,每段数字范围为0-255,段与段之间用英文句点'.'隔开
其中,
250-255: 特点:三位数,百位数是2,十位是5,个位是0-5,用正则表达式可以写成:25[0-5]
200-249: 特点:三位数,百位数是2,十位是0-4,个位是0-9,用正则表达式可以写成:2[0-4]\d
100-199:特点: 三位数,百位数是1,十位,个位是0-9,用正则表达式可以写成:1\d{2}
10-99:特点:二位数,十位是1-9,个位数0-9,用正则表达式可以写成:[1-9]\d
0-9:特点:一位数,用正则表达式可以写成:\d
综上:可以将0-99的正则表达式写成:[1-9]?\d (?表示前一个字符0次或1次扩展)
以上,视频里还是正确的,但是其正则表达式是这样的:
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
我们分解来看
([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]),这一部分是说匹配数字0-255,咋看起来没错,但是因为最先开始的匹配拥有最高的优先权,也就是说,对于202.204.80.112这样的,先匹配的是2而不是202
其次,该表达式中的 .
意味着匹配所有单个字符,这也就说明即使把IP改成202$204$80$112他也会匹配成功,这明显是不对的
将上述正则表达式验证一下:
他只能匹配到202.204;因为他首先匹配了2接着把0作为单个字符匹配,同理是2. 接着是20 最后是匹配了4(正好是四组)
只需要将正则表达式改成这样:
((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)问题即可解决。
代码如下:
import
re
right=r'((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)'
n=re.search(right,'202.204.80.112')
print(n.group(0))
#输出:202.204.80.112
IPV0地址分四段,每段数字范围为0-255,段与段之间用英文句点'.'隔开
其中,
250-255: 特点:三位数,百位数是2,十位是5,个位是0-5,用正则表达式可以写成:25[0-5]
200-249: 特点:三位数,百位数是2,十位是0-4,个位是0-9,用正则表达式可以写成:2[0-4]\d
100-199:特点: 三位数,百位数是1,十位,个位是0-9,用正则表达式可以写成:1\d{2}
10-99:特点:二位数,十位是1-9,个位数0-9,用正则表达式可以写成:[1-9]\d
0-9:特点:一位数,用正则表达式可以写成:\d
综上:可以将0-99的正则表达式写成:[1-9]?\d (?表示前一个字符0次或1次扩展)
以上,视频里还是正确的,但是其正则表达式是这样的:
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
我们分解来看
([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]),这一部分是说匹配数字0-255,咋看起来没错,但是因为最先开始的匹配拥有最高的优先权,也就是说,对于202.204.80.112这样的,先匹配的是2而不是202
其次,该表达式中的 .
意味着匹配所有单个字符,这也就说明即使把IP改成202$204$80$112他也会匹配成功,这明显是不对的
将上述正则表达式验证一下:
他只能匹配到202.204;因为他首先匹配了2接着把0作为单个字符匹配,同理是2. 接着是20 最后是匹配了4(正好是四组)
只需要将正则表达式改成这样:
((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)问题即可解决。
代码如下:
import
re
right=r'((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)'
n=re.search(right,'202.204.80.112')
print(n.group(0))
#输出:202.204.80.112
相关文章推荐
- 正则表达式匹配IP地址
- 正则表达式取得匹配IP地址前三段
- 正则表达式匹配MAC地址、邮箱地址、IP地址
- 正则表达式匹配任意字符(包括换行符)的写法
- 匹配有效的IP地址
- 正则表达式惰性匹配模式(?)
- 匹配IP地址的正则表达式 (转)
- 正则表达式Pattern(模式类)Matcher(匹配器类)
- java使用正则表达式判断手机号,固定电话,身份证,邮箱,url,车牌号,日期,ip地址,mac,人名等
- 正则表达式 - 匹配规则
- 正则表达式匹配URL——给URL地址加上<a> 链接
- 正则表达式匹配可能包括任意长度的任意空白的任意字符串(最短匹配)
- 正则表达式的汉字匹配
- 正则表达式筛选出字符串中的ip地址
- 正则表达式验证Ip地址(绝对正确)
- 正则表达式——密码规则匹配
- 深入入门正则表达式(java) - 匹配原理 - 2 - 回溯
- 正则表达式-位置匹配(三)
- 正则表达式匹配中文的简单应用
- 正则表达式匹配重复中文字符并合并