2.3 高级应用-环视

正则表达式 1377次浏览 本站
一、环视(Look Around)概念
环视只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的
环视按照方向划分有顺序逆序两种,按照是否匹配有肯定否定两种,组合起来就有四种环视。环视相当于对所在位置加了一个附加条件。
语法:

(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression

(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression

(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression

(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression

举例:

“(?<=Windows )\d ”在匹配“Windows 2003”时,匹配成功,匹配结果为“2003”。我们知道“\d ”表示匹配一个以上的数字,而“(?<=Windows )”相当于一个附加条件,表示所在位置左侧必须为“Windows ”,它所匹配的内容并不计入匹配结果。同样的正则在匹配“Office 2003”时,匹配失败,因为这里任意一串数字子串的左侧都不是“Windows ”。

“(?!1)\d ”在匹配“123”时,匹配成功,匹配的结果为“23”。“\d ”匹配一个以上数字,但是附加条件“(?!1)”要求所在位置右侧不能是“1”,所以匹配成功的位置是“2”前面的位置。

二、环视匹配原理

环视是正则中的一个难点,对于环视的理解,可以从应用和原理两个角度理解,如果想理解得更清晰、深入一些,还是从原理的角度理解好一些。
上面提到环视相当于对“所在位置”附加了一个条件,环视的难点在于找到这个“位置”,这一点解决了,环视也就没什么秘密可言了。

1.顺序环视匹配过程

对于顺序肯定环视(?=Expression)来说,当子表达式Expression匹配成功时,(?=Expression)匹配成功,并报告(?=Expression)匹配当前位置成功。
对于顺序否定环视(?!Expre

发表评论

电子邮件地址不会被公开。 必填项已用*标注