`
njmnjx
  • 浏览: 232104 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

环视限制

 
阅读更多
此文旨在讲解环视限制的使用

先看下面这个模式
(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])

当然可以匹配
192.168.0.123
001.12.0.1

但也可以匹配
0.0.0.0

这是不对的。
办法是添加环视限制。两种添加方法:
第一种:向前否定环视
(?!0+\.0+\.0+\.0+)(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])

第二种:向后否定环视
(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])(?<!0+\.0+\.0+\.0+)

这样一来就可以将
0.0.0.0
排除在外了。

注:
1、两个环视所处位置不同,皆因要环视的方向不同。向前即向右侧环视,向后即向左侧环视。
以向前为例说明--这里的检测对象在右侧,那么环视方向即为向前则使用
(?!0+\.0+\.0+\.0+) 
   
(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])的左侧
反之则在右侧使用(?<!0+\.0+\.0+\.0+)。
2、无论向前环视,还是向后环视都会作用于整个表达式。关系到整个模式的匹配成功与否。

继续
123.3.21.223-------》会匹配123.3.21.22不完整。
72123.3.21.223-----》会匹配123.3.21.22这种内嵌内容,不准确。
如何处理,完善如下:
(?<![\d.])(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])(?<!0+\.0+\.0+\.0+)(?![\d.])
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics