Impala中regexp_like正则精确匹配异常问题求助
问题分析与解决
你的正则之所以错误匹配RATES.BOND_FINANCE.AUD.ABCDEF,核心原因是SQL字符串中的反斜杠被转义,导致正则里的\.实际被解析成了.(正则中.匹配任意字符,包括下划线)。原正则^RATES\.BOND\..{3}\..*在Impala中实际生效的是^RATES.BOND..{3}..*,其中BOND后的.会匹配下划线,从而命中不符合格式的字符串。
修正方案
你需要确保正则中的点号被正确解析为字面量的点,有两种可靠方式:
方式1:使用双反斜杠转义点号
在SQL字符串中,反斜杠本身需要转义,所以要用\\.表示正则里的字面量点:
SELECT path , regexp_like(path, '^RATES\\.BOND\\..{3}\\..*') as regex FROM Table1
方式2:使用字符类[.]匹配点号
字符类中的点号不需要转义,直接表示字面量点,可读性更强:
SELECT path , regexp_like(path, '^RATES[.]BOND[.].{3}[.].*') as regex FROM Table1
两种方案都能严格匹配RATES.BOND.XXX.ABCDEF格式:
- 确保
RATES后是点 - 确保
BOND后是点(而非下划线等其他字符) - 匹配3个任意字符的
XXX部分 - 匹配后续任意长度的
ABCDEF部分
内容的提问来源于stack exchange,提问作者Smc
相关产品推荐
相关产品推荐

