|
|

楼主 |
发表于 2023-1-18 09:28
|
显示全部楼层
本帖最后由 马黑黑 于 2023-1-18 09:30 编辑
四、负向后行断言
(?<!子表达式)表达式
例:
(?<![oO])手机
子表达式的引导符号是 ?<! ,与正向后行断言的 ?<= 相比就是把等号 = 变为了感叹号 ! ,属否定性质的断言,用以限制后面主表达式的匹配范围。这种断言称“负向后行断言”或“否定后行断言”。上面的例子,(?<![oO])手机,用意是我们不想匹配 OPPO 和 vivo 手机,子表达式 (?<![oO]) 表示,在子表达式所在位置,目标字符串不能是 o 或 O ,即 [oO] 中的任意一个都不能是,若此,就匹配后面的“手机”字符串。运行结果,除 OPPO手机 和 vivo手机 外,其余的都匹配标红。
断言中的负向,或称否定,要通过引导符号 ?<! 引出子表达式,用“子表达式不等于什么什么”来限定该位置之后的主表达式是否匹配,正如上面的例子所示,待检测字串在子表达式的位置上的字眼,如果不是 o 或 O,那么,其后的“手机”就匹配。
请注意,断言匹配目的是匹配子表达式前面或后面的主表达式,匹配结果不包含子表达式,所以,以下正则表达式,虽然也以否定形式进行匹配,但表达式没有主次之分,且匹配结果会连同否定表达式在目标检索对象所在位置一同给出,不属于断言匹配:
[^oO]手机
这个非断言匹配的正则表达式表示,如果“手机”前面的字符不是 o 也不是 O,那么就匹配。匹配的结果将是:
一加手机 → 加手机
“加”匹配了 [^oO],“手机”匹配表达式中的 手机 。
而使用断言匹配,子表达式对应的位置是一加手机中的“加”,但“加”不作为匹配结果,所以匹配的是“一加手机”中的“手机”。
至此,四种断言正则表达式都介绍完了,希望感兴趣的朋友能够慢慢理解。断言是正则表达式的高级应用,是很多行内人都望而却步的东东,要理解它不容易,要熟练使用它更不容易。
|
评分
-
| 参与人数 1 | 威望 +50 |
金钱 +100 |
经验 +50 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|