`
linychuo
  • 浏览: 8899 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

由于工作需要看了一下正则表达式的预搜索。

 

预搜索分为正向预搜索和反向预搜索。

 

正向预搜索: "(?=xxxxx)" "(?!xxxxx)"

格式: "(?=xxxxx)" ,在被匹配的字符串中,它对所处的 " 缝隙 " 或者 " 两头 " 附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 "\b" ,本身不匹配任何字符。 "\b" 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

 

举例 :表达式 "Windows (?=NT|XP)" 在匹配 "Windows 98, Windows NT, Windows 2000" ,将只匹配 "Windows NT" 中的 "Windows " ,其他的 "Windows " 字样则不被匹配。

 

 

反向预搜索: "(?<=xxxxx)" "(?<!xxxxx)"
这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的 " 左侧 " ,两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 " 正向预搜索 " 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

举例 :表达式 "(?<=\d{4})\d+(?=\d{4})" 在匹配 "1234567890123456" 时,将匹配除了前 4 个数字和后 4 个数字之外的中间 8 个数字。

 

由于 JScript.RegExp 不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如: Java 1.4 以上的 java.util.regex 包.

 

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics