BigQuery中Regexp_contains无法检测重复4次以上字符的问题求助
解决REGEXP_CONTAINS无法识别连续重复字符的问题
你的正则r'(.)\1{3,}'逻辑本身没问题——它用来匹配任意连续出现4次及以上的字符(首字符+重复3次),但无法识别ART00000000这类字符串,核心原因是不同SQL引擎对正则语法的支持存在差异,比如部分引擎不支持\1反向引用,或者需要调整语法格式。
以下是针对主流SQL引擎的修正方案:
BigQuery:
BigQuery的REGEXP_CONTAINS支持反向引用,若原语句失效,可尝试覆盖所有字符类型的写法(避免因字符类型匹配遗漏导致的问题):SELECT REGEXP_CONTAINS('ART00000000', r'([\s\S])\1{3,}') AS has_repeated_chars;MySQL:
MySQL的正则函数不支持\1这类反向引用,可改用两种方式实现:- 直接写重复匹配规则(适用于MySQL 8.0+的
REGEXP_LIKE):SELECT REGEXP_LIKE('ART00000000', '(.)\\1\\1\\1') AS has_repeated_chars; - 通过替换重复字符后对比长度判断:
SELECT CHAR_LENGTH('ART00000000') != CHAR_LENGTH(REGEXP_REPLACE('ART00000000', '(.)\\1+', '\\1')) AS has_repeated_chars;
- 直接写重复匹配规则(适用于MySQL 8.0+的
PostgreSQL:
PostgreSQL的~操作符完全支持反向引用,直接使用原正则即可(注意无需额外转义):SELECT 'ART00000000' ~ '(.)\1{3,}' AS has_repeated_chars;
如果你的需求是识别连续重复超过4次(即5次及以上),只需将正则中的{3,}修改为{4,},即r'(.)\1{4,}'。
内容的提问来源于stack exchange,提问作者André Santos
相关产品推荐
相关产品推荐

