正则表达式--零宽断言
2008-11-19 23:13
351 查看
在网上学习《正则表达式30分钟入门教程》的时候,感觉关于零宽断言的内容写的比较晦涩难懂(郁闷的发现很多网上关于这个内容的介绍就是直接copy了这篇文章的内容),通过自己的理解整理了一下。
第一种是所谓的零宽度正预测先行断言,以(?=exp)的形式出现,它匹配的是exp前面的那个位置,特别要注意的是它匹配的只是一个位置,而不是任何字符。比如,/b/w+(?=ing/b)在查找I'm singing while you're dancing的时候会匹配sing和danc,因为其中的
(?=ing)匹配了singing的sing和ing之间的那个位置,还有dancing的danc和ing之间的位置,即ing之前的那个位置。如果理解了第一
种零宽断言,后面的三种也就很好理解了。
第二种是零宽度正回顾后发断言,以(?<=exp)的形式出现,它匹配的是exp后面的那个位置。同样是上面的那个例子,如果正则表达式变为/b/w+(?<=ing/b),匹配结果就变成了singing和dancing,因为(?<=ing)匹配的是ing后面的位置。
第三种是零宽度负预测先行断言,以(?!exp)的形式出现,它匹配的是后面跟的不是exp的位置。比如/b/w+n(?!g)/w+/b,在查找I'm
singing while you're dancing的时候匹配了dancing,因为n(?!g)指的就是n后面不跟g,所以虽然有好几个单词里都有n,但是只有
dancing里有n后面不跟g。
第四种是零宽度正回顾后发断言,以(?<!exp)的形式出现,它匹配的是前面不是exp的位置。同样是第三种情况的那个例子,如果用/b/w+n(?<!g)/w+/b去查找I'm singing while you're dancing的话会匹配singing和dancing,因为这两个单词的n的前面都不是g。
总之,零宽断言是用来匹配和exp相关的位置的,不是匹配任意的字符。
第一种是所谓的零宽度正预测先行断言,以(?=exp)的形式出现,它匹配的是exp前面的那个位置,特别要注意的是它匹配的只是一个位置,而不是任何字符。比如,/b/w+(?=ing/b)在查找I'm singing while you're dancing的时候会匹配sing和danc,因为其中的
(?=ing)匹配了singing的sing和ing之间的那个位置,还有dancing的danc和ing之间的位置,即ing之前的那个位置。如果理解了第一
种零宽断言,后面的三种也就很好理解了。
第二种是零宽度正回顾后发断言,以(?<=exp)的形式出现,它匹配的是exp后面的那个位置。同样是上面的那个例子,如果正则表达式变为/b/w+(?<=ing/b),匹配结果就变成了singing和dancing,因为(?<=ing)匹配的是ing后面的位置。
第三种是零宽度负预测先行断言,以(?!exp)的形式出现,它匹配的是后面跟的不是exp的位置。比如/b/w+n(?!g)/w+/b,在查找I'm
singing while you're dancing的时候匹配了dancing,因为n(?!g)指的就是n后面不跟g,所以虽然有好几个单词里都有n,但是只有
dancing里有n后面不跟g。
第四种是零宽度正回顾后发断言,以(?<!exp)的形式出现,它匹配的是前面不是exp的位置。同样是第三种情况的那个例子,如果用/b/w+n(?<!g)/w+/b去查找I'm singing while you're dancing的话会匹配singing和dancing,因为这两个单词的n的前面都不是g。
总之,零宽断言是用来匹配和exp相关的位置的,不是匹配任意的字符。
相关文章推荐
- 正则表达式零宽断言详解(?=,?<=,?!,?<!)
- C#正则表达式(3):注释,分组,向后引用,零宽断言,贪婪
- JavaScript正则表达式的零宽断言
- js正则表达式中关于零宽断言的奇异现象
- JavaScript中正则表达式(零宽度正回顾后发断言)
- JAVASCRIPT 正则表达式学习-->基础与零宽断言(转自司徒正美)
- 正则表达式学习2 - 零宽断言
- 正则表达式零宽断言详解
- 用正则表达式(零宽断言)去除字符串中重复的字符
- regex 正则表达式零宽度正预测先行断言 and 零宽度正回顾后发断言
- 教你怎么理解正则表达式之零宽断言(环视)
- 老男孩带你了解perl正则表达式中的零宽断言
- 正则表达式匹配不包含特殊子串的字符串(零宽断言的使用)
- 正则表达式--零宽断言
- crawler_正则表达式零宽断言
- 正则表达式中后向引用、零宽断言、…
- 通过 正则表达式-零宽断言 获取指定内容
- 正则表达式零宽断言详解
- 正则表达式之零宽断言