中易网

正则表达式的零宽断言 是什么意思?

答案:1  悬赏:40  
解决时间 2021-12-31 14:27
请详细说明下
最佳答案
分类 代码/语法 说明
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

“(?<!exp)"的意思是匹配前面不是exp的位置

因此匹配前面不是反斜杠的正则表达式应该这样写:(?<!\\)\*

感觉关于零宽断言的内容写的比较晦涩难懂(郁闷的发现很多网上关于这个内容的介绍就是直接copy了这篇文章的内容),通过自己的理解整理了一下。
第一种是所谓的零宽度正预测先行断言,以(?=exp)的形式出现,它匹配的是exp前面的那个位置,特别要注意的是它匹配的只是一个位置,而不是任何字符。比如,\b\w+(?=ing\b)在查找I'm singing while you're dancing的时候会匹配sing和danc,因为其中的(?=ing)匹配了singing的sing和ing之间的那个位置,还有dancing的danc和ing之间的位置,即ing之前的那个位置。如果理解了第一种零宽断言,后面的三种也就很好理解了。
第二种是零宽度正回顾后发断言,以(?<=exp)的形式出现,它匹配的是exp后面的那个位置。同样是上面的那个例子,如果正则表达式变为\b\w+(?<=ing\b),匹配结果就变成了singing和dancing,因为(?& lt;=ing)匹配的是ing后面的位置。
第三种是零宽度负预测先行断言,以(?!exp)的形式出现,它匹配的是后面跟的不是exp的位置。比如\b\w+n(?!g)\w+\b,在查找I'msinging while you're dancing的时候匹配了dancing,因为n(?!g)指的就是n后面不跟g,所以虽然有好几个单词里都有n,但是只有dancing里有n后面不跟g。
第四种是零宽度正回顾后发断言,以(?<!exp)的形式出现,它匹配的是前面不是exp的位置。同样是第三种情况的那个例子,如果用\b\w+n(?<!g)\w+\b去查找I'm singing while you're dancing的话会匹配singing和dancing,因为这两个单词的n的前面都不是g。
总之,零宽断言是用来匹配和exp相关的位置的,不是匹配任意的字符。

如:匹配《count="2016"》《count="5679"》《count="2347"》《count="1234"》字符串中不是《count="1234"》的所有内容 可以写作的正则式:count="((?!1234)\d)+?"
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
两个因数的积是608其中一个因数除以2另一个因
补办驾驶证去哪里
怀柔区龙山派出所地址在什么地方,想过去办事
巡道的意思是什么?巡道的释义是什么啊?
法国布列塔尼的首府叫什么??
铁岭市北方垂钓城地址在哪,我要去那里办事
势威的意思是什么啊?请解释下!
如何礼貌的拒绝面试者
怀柔区泉河派出所地址有知道的么?有点事想过
食肉摊和蔬菜摊是从哪年没纳税的
汽东前叶子板发热,十公里左右就发烫。大灯后
没作理会处的意思是什么?没作理会处的释义是
确定买开瑞K60了,就是颜色纠结白色还是棕色
雁栖派出所地址在什么地方,想过去办事
酰基 酮 醛 的通式 还有重要化学式 区别什么
推荐资讯
旅夜抒怀 唐 杜甫 细草微风岸,危樯独夜舟。
北新村村委会地址在哪,我要去那里办事
1米56的个子,体重50公斤穿长款还是短的貂皮
好邻居便利店(丽水店)地址在哪,我要去那里办
晚上经常吃卤煮 会胖吗
寝床的意思是什么?寝床的释义是什么啊?
涵蓋的意思是什么?涵蓋的释义是什么啊?
旅人的意思是什么?旅人的释义是什么啊?
大学不交学费能不能拿到毕业证?
秤衡的意思是什么?秤衡的释义是什么啊?
曲沃县环境保护局地址在哪,我要去那里办事
冠牛木门整体家居价格贵吗?装修没什么钱,又
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?