举一个最简单的栗子
这个前后说的是0宽所在的位置,是在:前还是后
http://www.sb.com
1.前向正向查找
(1)
如果用:.*(?=:)
首先(?=:)被称作0宽度断言,所谓0宽度应该是插在了p和:之间的那个0宽度
这个是规范用法,匹配http,不包括:
(2)换顺序
(?=:).*
(?=:)还是表示插在p和:之间的0宽,所以匹配://www.sb.com,包含:
2.前向反向查找
(1)
.*(?!:)
匹配全部,因为http://www.sb.com后面并没有:,意思是有:的话,不能匹配:前面的那段,没有的话,相当于.*
(2)换顺序
(?!:) .*
匹配全部,只要匹配结果前面没有:就行
3.后向正向查找
(?<=\$)[0-9.]+
i need 100$100
零宽插在了$的后面,所以不包含$,匹配100
换顺序
[0-9.]+(?<=\$)
匹配不到,以为100$会包含其中
[0-9.\$]+(?<=\$)
会匹配到100$
4.后向负向查找
i paid $7000 for 1 apple
\b(?<!\$)\d+\b
也就是如果有$,后面跟数字,不要.
换顺序
\b\d+(?<!\$)\b
匹配7000和1,只要7000和1后没有$
新发现就是$7000也算单词边界.
http://www.sb.com