作者:文岚 | 来源:互联网 | 2023-06-14 12:50
很多文章,把环视(又叫零宽断言,或者预搜索,随你怎么叫啦),解释的云里雾里的,看他们的图示,这里,他们其实是默认你已经知道了用法(这种教程,是他们自己知道,也认为你也知道了),这种
很多文章,把环视(又叫零宽断言,或者预搜索,随你怎么叫啦),解释的云里雾里的,看他们的图示,
这里,他们其实是默认你已经知道了用法(这种教程,是他们自己知道,也认为你也知道了),这种解析都是搅合浆糊的, 大多数人,应该是,看了一遍后,该不会!还是不会的!除非,你看了一遍又一遍,才明白过来,要不是他们这些,你可能早就会了,错误引导了你的思维,好多人明白后,会气得xxx,这时要(注意修为),原因:它(教程这),这里少写了一个东西,藏着呢!
我来解析吧,
数据_表达式 环视子表达式 或者 | 环视子表达式 数据_表达式
data_exp (?=sub_exp) | (?<=sub_exp) data_exp
(这里的data_exp ,非常重要,!!!
是你能,很快明白环视的关键,而大多数环视解释文章,把它当空气,释放了,这个一定得带上,看完,你就明白我说的了,环视其实很简单,是那些,文章把你弄迷糊了)
这里的2行
数据_表达式 和 环视子表达式 ,之间的 空格是 不存在的, 之所以,这两样写 ,为了清晰而已,
明白他们之间的位置关系,
而是非之分,就是 在?或者<,后面+ 个 !,
举例:
(?<=m)
data_exp 匹配前面是m的数据,若data_exp 是mABC就匹配,若是aABC不匹配,是 ABC也都不能匹配,就是这一 data_exp 前面必须有个m,这个(?<=m)就是预订的位置,但并不占位(零宽度的由来),而数据_表达式,
data_exp(这里是ABC),才是最终的正则要得到的数据!好了,我好像已经把该讲的都讲完了。
剩下的,就是实例了,邮编例子:
邮编6位(china的)
邮编的前面不能有数字,否则那就不是6位了,那先给个邮编的data_exp, \d{5},可以吧,不行,0 不能打头,只能是1-9,好办,那就 [1-9]{5}
再给它+个前缀(前面不能有数字),(?
同理后面也不能有数字,(?!\d),注意,后面,就不能用<了,合起来,就是
(?
写正则的环视总结:
1 先写 数据表达式
2 确定 环视子表达式 是在前面 还是在后面,前面 加 < ,非 加 !
3 注意环视子表达式 ,不占宽度!不匹配文本内容
4 环视和分组都有 ( )