学习正则表达式零宽断言有点晕,看到这么一段
零宽度正预测先行断言 (?=exp) 匹配exp前面的位置
例:[a-z]*(?=ing) 可以匹配 cooking 和 singing 中的 cook 与 sing 。
注意:先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个 ing (也就是先行断言中的表达式)然后 再匹配其前面的表达式,
若无法匹配则继续查找第二个 ing 再匹配第二个 ing 前面的字符串,若能匹配则匹配,符合正则的贪婪性。
这个是可以看懂的,但问题是匹配了这个位置然后怎么用呢?
哪位大神能用java写一个应用的例子看看,谢了!!!
用你的例子稍微变化一点来解释:
假如
原始字符串="ainging"
不用正向0宽匹配的正则表达式:/[a-z]ing/
这时候得到的匹配结果是:aing
//a后面有ing,但是因为第一次匹配完事后,aing已经消耗掉了,剩下的ing是不够再匹配[a-z]ing了
使用正向0宽匹配的政策表达式:/a-z/
得到的匹配结果["a","g"]
//因为a后面也有ing,g后面也有ing
能看出区别了吗?0宽匹配组里面(?=ing)是不消耗匹配字数也不占匹配结果的。
至于用在什么地方还是看你有什么需求了。