RE2语法中如何实现字符串末尾特定单词的否定匹配?
实现RE2正则匹配不以特定单词结尾的字符串
要实现匹配所有不以“health”结尾的字符串,RE2确实可以做到,但因为RE2不支持后行断言(lookbehind)和复杂的负向前瞻断言,需要换一种思路构造正则:
最终正则表达式
^(?:.*(?:[^h]|h[^e]|he[^a]|hea[^l]|heal[^t])|.{0,4})$
逻辑说明
.{0,4}:匹配长度小于5的字符串,这类字符串自然不可能以5个字符的“health”结尾;.*(?:[^h]|h[^e]|he[^a]|hea[^l]|heal[^t]):匹配长度≥5的字符串,通过分步排除末尾构成“health”的可能:[^h]:最后一个字符不是h;h[^e]:最后一个字符是h,但倒数第二个不是e;he[^a]:最后两个字符是he,但倒数第三个不是a;hea[^l]:最后三个字符是hea,但倒数第四个不是l;heal[^t]:最后四个字符是heal,但倒数第五个不是t;
只要满足其中任意一种情况,就说明字符串不会以“health”结尾。
对比你之前的表达式
你之前的正则会检查字符串任意位置是否包含“health”,而上面的正则仅针对字符串末尾进行判断,完全符合你的需求。
内容的提问来源于stack exchange,提问作者LemonPie86
相关产品推荐
相关产品推荐

