环视
也叫零宽断言
它匹配的是一个位置,该位置必须满足零宽断言条件,才能继续往下进行匹配。
由于位置不是字符,它是没有宽度的,所以叫做零宽断言。
环视分为4种情况,概念是想通的,用哪种需要根据自己的需求来决定:
否定逆序环视(?<!)
肯定逆序环视(?<=)
否定顺序环视(?!)
肯定顺序环视(?=)
否定逆序环视:在这个位置的前边(逆序),不能有(否定)条件给出的字符串
肯定逆序环视:在这个位置的前边(逆序),必须是(肯定)条件给出的字符串
否定顺序环视:在这个位置的后边(顺序),不能有(否定)条件给出的字符串
肯定顺序环视,在这个位置的后边(顺序),必须是(肯定)条件给出的字符串
举例
1234567890
比如给这一串数字转为英文的写法,需要每三位加一个逗号。
那么我们就需要找到这样的位置。
这个位置有什么规律呢,每个逗号后边必须有3的倍数个数字,且个位数字后不能有逗号,那么可以这么写:
(?=(\d\d\d)+\b)
表示需要3个数字这样的组合,至少出现1次,最后是单词的分界符。
注意零宽断言,并没有真的匹配,环视的意思可以这么理解,即匹配前先看一看,看前/后是否满足条件,然后再决定当前位置时候合适开始匹配,环视时