先上一个连接
https://deerchao.net/tutorials/regex/regex.htm

难点一:零宽断言与负向零宽断言

1、零宽断言

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。请读者仔细阅读下面的表达式,只要能读懂就可深度理解零宽断言
(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。
首先我们先明白此类断言的性质–零宽断言是条件表达符,不占位
判断逻辑是:如果=号后面条件与被匹配文本相吻合,则匹配吻合筛选条件的文本(不包含条件)
请仔细观察上面四幅图的变化,以发现内在规律。
例子:
正则表达式难点记录
设置两组对比文本,123456789123406789,只有中间的0和5不同
以下用自然语言解读4幅图
1:如果该条件((?=))所在位置后面的数字是0,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4后面的数字为0的字符串。
2:如果该条件((?=))所在位置后面的数字是5,我就匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4后面的数字为5的字符串。
3:如果该条件((?<=))所在位置前面的数字是0,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4前面的数字为0的字符串。
3:如果该条件((?<=))所在位置前面的数字是5,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配5前面的数字为0的字符串。
该表达是只是条件表达符,用来筛选文本,不进行输出匹配,而对于?=?<=的区别以上例子表达的很清楚了,即,没有<的向后匹配,有<的向前匹配。

2、负向零宽断言

与正向断言类似,只需要把=改成!仔细观察便知。

相关文章: