正则表达式之<八>前后查找

正则表达式的先行断言和后行断言一共有4种形式:
1. (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
2. (?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)

3. (?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
4. (?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)


?=向前查找,但不包含(就是匹配结果中不包含,这就是不消费,"不消费"就是"零宽")
[img]http://dl2.iteye.com/upload/attachment/0085/6704/70c59760-9130-31d7-95d7-f4d27283129f.png[/img]
?<=向后查找
[img]http://dl2.iteye.com/upload/attachment/0085/6706/801b8146-2288-3825-9400-904e3eded4ac.png[/img]

?=结合?<=
[img]http://dl2.iteye.com/upload/attachment/0085/6708/2ee695b0-25f0-360c-9b4d-d2fddc3db943.png[/img]

?<!负向后查找
[img]http://dl2.iteye.com/upload/attachment/0085/6712/73e01a53-0798-383a-a435-afe8767220ca.png[/img]
对比?<=
[img]http://dl2.iteye.com/upload/attachment/0085/6710/fbc83e1a-415c-35a1-8fd0-4961e1153333.png[/img]


可以这么理解,(xx pattern)这个pattern就是给你指定一个位置。
说是在这个位置,之前,还是在这个位置之后,但是不包含该位置字符。
比如:
”a regular expression” re(?=gular)
首先你得先匹配到这个gular字符,然后住在这个字符之前为re 则是匹配的。
所以这个结果应该是:
”a [color=red][b]re[/b][/color]gular expression”

假设”a regular expression” re(?!gular)
那就表示re的后面不能为gular字符,则是匹配的。
那么这结果应该为:
”a regular exp[color=red][b]re[/b][/color]ssion”

假设”a regular expression” e(?=gular).
后面多了一个.这个字符就会是?=gular的第一个字符g
所以结果为
”a [b][color=red]reg[/color][/b]ular expression”

再看看向后查找:
regex represents regular expression (?<!\w)re
这就表示前面不能是子母或者下划线,后面跟着re字符的为匹配结果。
所以结果为:
[color=red][b]re[/b][/color]gex [color=red][b]re[/b][/color]presents [color=red][b]re[/b][/color]gular expression
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值