不使用环视的Impala正则表达式:匹配AB开头非ABC或含DE非DEF
正则表达式解决方案(适配Impala无环视场景)
针对你的需求,我们拆分两类匹配规则分别实现后合并,避开Impala不支持的环视语法:
第一类:以"AB"开头但不是"ABC"的字符串
拆成两种场景覆盖所有情况:
- 字符串就是"AB"本身
- 以"AB"开头,且第三个字符不是"C"(或字符串长度超过2且后续字符不以"C"开头)
对应的正则片段:
^AB$|^AB[^C].*
第二类:包含"DE"但不是"DEF"的字符串
同样拆成两种场景覆盖:
- 字符串就是"DE"本身
- 字符串中出现"DE",且"DE"后面不是"F"(或"DE"位于字符串末尾)
对应的正则片段:
.*DE$|.*DE[^F].*
合并后的完整正则
把两类规则用|拼接,最终可用的表达式:
^AB$|^AB[^C].*|.*DE$|.*DE[^F].*
你之前表达式的问题说明
.*AB?[^C].*:AB?表示匹配"A"或者"AB",不符合"以AB开头"的要求;[^C]没有限定位置,逻辑混乱。.*DE?[^DEF]:DE?表示匹配"D"或者"DE",不符合"包含DE"的要求;[^DEF]是排除单个D/E/F字符,而我们要排除的是"DE"后紧跟"F"的情况,方向错误。
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

