格式:
1.正向预搜索,右侧是或者不是什么:"(?=xxxxx)","(?!xxxxx)";
2.反向预搜索,左侧是或者不是什么:"(?<=xxxxx)","(?<!xxxxx)"
注意:
1.括号是必须的且不参与反向引用中个数的计算;例如 正则表达式 (?=12)(\d{2})\1 在匹配字符‘12123’的时候,匹配成功,返回字符"1212"
2.预搜索内只是限制条件,本身不匹配任意字符;例如 正则表达式 (?=1234)\d{1} 在匹配字符'123456'的时候,匹配成功,返回字符‘1’,而不是‘12345’
例子:
待验证字符:a1aa fbffff 989999999
正则表达式:(\w)((?=\d\1\1)(\d))+
匹配流程:
\w => 先找出字符a,即\1
(?=\d\1\1) => 再判断第一个a之后的字符是否为\daa格式,很显然是的,即‘1aa’;
(\d),预搜索是不匹配字符的,所以\d匹配到的是1
所以得到第一个结果 a1
\w => 先找出字符f,即\1
(?=\d\1\1) => 再判断第一个f之后的字符是否为\daa格式,很显然‘faa’不满足;如果把第三个f改为任意数字,则会匹配到(f1ff)
\w => 先找出字符9,即\1
(?=\d\1\1) => 再判断第一个9之后的字符是否为\daa格式,很显然是的,即‘899’;
(\d),预搜索是不匹配字符的,所以\d匹配到的是8
所以得到第一个结果 98
因为 ((?=\d\1\1)(\d))+ 格式;可以继续向后找;
从第三个数字9向后查找,得到第三至第五个数字 9(\w)9(\1)9(\1)复合要求,获取到第三个数字9
从第四个数字9向后查找,得到第四至第六个数字 9(\w)9(\1)9(\1)复合要求,获取到第四个数字9
...
从第七个数字9向后查找,得到第七至第九个数字 9(\w)9(\1)9(\1)复合要求,获取到第七个数字9
从第八个数字9向后查找,此时只剩下2个九不满足匹配条件
最终结果为:9899999;最后的两个九是无法匹配到的
最最终结果为:[["a1","9899999"],["a","9"],["1","9"],["1","9"]]
标签:字符,匹配,数字,正则表达式,搜索,格式 From: https://www.cnblogs.com/ryuma/p/16898996.html