就是指"exp"这个字符串(也可以是其他类型)所在在你所需要匹配的字符串中所在的位置。。。。。。
以下是一些网上找到的说明
1)
先行断言 也叫零宽度正预测先行断言(?=exp) -- 表示匹配表达式前面的位置
例如 [a-z]*(?=ing) 可以匹配 cooking 和 singing 中的 cook 与 sing 。
注意:先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个 ing (也就是先行断言中的表达式)然后 再匹配其前面的表达式,若无法匹配则继续查找第二个 ing 再匹配第二个 ing 前面的字符串,若能匹配则匹配,符合正则的贪婪性。
例如: .*(?=ing) 可以匹配 "cooking singing" 中的 "cooking sing" 而不是 cook
2)
后发断言 也叫零宽度正回顾后发断言(?<=exp) -- 表示匹配表达式后面的位置
例如(?<=abc).* 可以匹配 abcdefg 中的 defg
注意:后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式,若无法匹配则继续查找第二个 abc 再匹配第二个 abc 后面的字符串,若能匹配则匹配。
例如(?<=abc).* 可以匹配 abcdefgabc 中的 defgabc 而不是 abcdefg
3)
负向零宽断言
负向零宽断言 (?!exp) 也是匹配一个零宽度的位置,不过这个位置的“断言”取表达式的反值,例如 (?!exp) 表示 "exp" 前面的位置,如果 "exp" 不成立 ,匹配这个位置;如果 "exp" 成立,则不匹配。同样,负向零宽断言也有“先行”和“后发”两种,负向零宽后发断言为 (?<!exp)
负向零宽后发断言(?<!exp)
负向零宽先行断言 (?!exp)
负向零宽断言要注意的跟正向的一样。 |