美文网首页
正则表达式——02:零宽断言

正则表达式——02:零宽断言

作者: 大苍狗 | 来源:发表于2018-12-04 22:30 被阅读24次

    在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了。

    零宽断言正如它的名字一样,是一种零宽度的匹配,它最终匹配结果只是一个位置而已。

    零宽断言有正向(positive)、负向(negative)、先行(lookahead)、后行(lookbehind),一共有4种组合形式:

    • (?=exp) 零宽正向先行断言(zero-width positive lookahead assertion)
    • (?<=exp) 零宽正向后行断言(zero-width positive lookbehind assertion)
    • (?!exp) 零宽负向先行断言(zero-width negative lookahead assertion)
    • (?<!exp) 零宽负向后行断言(zero-width negative lookbehind assertion)

    这里面的exp是一个正则表达式。

    (1)先行(lookahead) & 后行(lookbehind)

    先行断言,是当扫描指针位于某处时,引擎会尝试匹配指针还未扫过的字符,先于指针到达该字符,故称为先行。

    后行断言,引擎会尝试匹配指针已扫过的字符,后于指针到达该字符,故称为后行。

    (2)正向(positive)和负向(negative)

    正向就表示匹配括号中的表达式,负向表示不匹配。

    (3)表达式详解

    eg.:(?<=exp)

    • ?表示零宽;
    • reg表示这个宽度为零的(边界)的表达式;
    • <箭头向后,就是lookbehind;没有箭头,默认为正向lookahead;
    • =等于,就是匹配,positive;!不等于就是不匹配,negative;
    操作符 说明 实例
    (?=exp) 正向先行断言,代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配exp re(?=gular)a regular expression这个字符串,匹配regular中的re,但不会匹配expression中的re
    (?<=exp ) 正向后行断言,代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配exp
    (?!exp) 负向先行断言,代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配exp
    (?<!exp) 负向后行断言,代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配exp

    相关文章

      网友评论

          本文标题:正则表达式——02:零宽断言

          本文链接:https://www.haomeiwen.com/subject/xzkbcqtx.html