正则表达式中的断言

正则表达式中的断言,也即零宽断言。零宽,指的是断言没有宽度。在正则表达式中,断言指的是一个位置。在一个普通的正则表达式中,比如^\d{10,}$,我们匹配的是一段内容,一个字符串。而在断言中,我们匹配的是一个位置

断言分为四种,分别是正向先行断言(?=pattern),负向先行断言(?!pattern),正向后行断言(?<=pattern),负向后行断言(?<!pattern)。实际上也就是两类:正向负向,与先行后行。

以下部分的a、b指的都是正则表达式(pattern)而不仅仅是普通字符。并且b代表断言的pattern,a代表要匹配的内容pattern

先来说先行后行。先行后行表示要匹配的内容位于断言位置的前面还是后面。简单地说,正向先行断言就是指if (a后面是b) return a(a(?=b))。举个例子,对于一串字符:123abcd321!@#,如果我想匹配符号前的数字321而不是字母前的数字123,可以使用表达式^\d+(?=!@#)$。首先会根据断言去找!@#,因为是先行断言,所以位置位于!@#之前,另外因为是正向断言,所以会去匹配所有位置位于!@#前的一个或多个(+)数字(\d)。

正向负向则代表了是与不是。负向先行断言就可以表示成if (a后面不是b) return a(a(?!b))。

如果是正向后行断言也很好理解,即if (a前面是b) return a((?<=b)a)。负向后行断言则为if (a前面不是b) return a((?<!pattern))。

评论加载中 (ง •̀ω•́)ง