super皮波 发表于 2014-12-12 10:25

?<=pattern 后向肯定到底如何使用

看了看书上的例子,理解的不深,有了解的朋友说一下具体的用法,最好有个例子,谢谢

银风冷月 发表于 2014-12-12 10:34

:D去看环视
主要是体现一个位置关系
http:##unmi.cc#regexlookaround#

super皮波 发表于 2014-12-12 10:36

回复 2# 银风冷月
在详细点说一下呗,来个例子


   

银风冷月 发表于 2014-12-12 11:05

例子:123456abc78
这里主要说的是一个位置,1前面的位置为0,1和2中间的位置为1,以此类推
表达式:(?<=\d)\d+
这个会匹配什么呢?
(?<=pattern)此式子是顺序肯定,即从左往右的位置来表示0位置之前非数字即\d,所以表达式执行失败,后续的\d+不执行,位置+1,位置1之前是数字1,表达式成立,执行\d+,匹配后续的数字,直到位置7,前方是数字6,表达式(?<=\d)返回True,执行\d+,但是其后并非数字,匹配失败,继续回头执行(?<=\d),数字7前方的位置10,前方是字母c,表达式整体是False不输出7,位置11前方是数字7,\d+也匹配8故输出8
最后匹配的是23456 8

银风冷月 发表于 2014-12-12 11:05

:roll: 语言表达能力不行,将就看下吧

HH106 发表于 2014-12-12 11:10

本帖最后由 HH106 于 2014-12-12 11:10 编辑

预搜索,匹配一个位置AB

正则:(?<=A).*?+(?=])意思就是A之后,]之前这二个位置,但结果中不包括A与]
这个匹配AB 中的,而不匹配B后的

super皮波 发表于 2014-12-12 11:53

?=pattern为前向肯定用法:(xxxx)(?=pattern) 只有(?=pattern)匹配的情况下,才会去匹配(xxxx)
?<=pattern为后向肯定   用法 (?<=pattern)(xxxx)只有(?<=pattern)匹配的情况下,才会去匹配(xxxx),匹配的结果不捕获(?<=pattern)这段

楼上的两位,我这么理解对吗?

HH106 发表于 2014-12-12 12:00

回复 7# super皮波

基本正确,有些小问题,正则表达式是顺序从左向右匹配


   

银风冷月 发表于 2014-12-12 13:55

回复 7# super皮波

(xxxx)(?=pattern) 这个表达式是(xxxx)可以匹配了,然后看(?=pattern)是否正确,如果整个式子是True,才会返回(xxxx)
例子:1234abc56
正则:\d(?=\d)
这里匹配的是123 5
就是因为位置原因,先匹配到数字1,位置是1,而位置1后面的是数字2,符合(?=\d),故匹配1;\d匹配数字4,4的后方是字母a不符合(?=\d)故不输出;数字6的位置是9,位置9后面是空,故不输出6

super皮波 发表于 2014-12-12 14:27

多谢楼上的几位朋友
页: [1]
查看完整版本: ?<=pattern 后向肯定到底如何使用