regexp_matches - 错误:正则表达式无效:量词操作数无效

时间:2018-03-02 13:16:40

标签: regex postgresql

所以我在postgres上运行regexp_matches时收到错误消息,但无法弄清楚如何通过它。它似乎在regex101等reg_exp测试站点上运行良好,但遗憾的是在实际应用时不起作用。错误消息是:

错误:正则表达式无效:量词操作数无效

select email, regexp_matches(email,'^[a-zA-Z0-9]{4}+[0-9]{6}') as pattern
from table
limit 10

它是电子邮件前缀中4个字母字符和6个数字的相对简单的模式。也许' ^ [a-zA-Z0-9] {4} + [0-9] {6}'可能不是最好的方式?任何建议将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:2)

^[a-zA-Z0-9]{4}+[0-9]{6}模式与PostgreSQL regexp引擎不兼容,因为它不支持possessive quantifiers{4}+在这里占有limiting quantifier,匹配4次量化模式,没有任何可能回溯到这4个字符。由于未使用max参数(即不是{4,7}),{4}+所有格量词的工作方式与{4}相同。

使用{4}代替{4}+

select email, regexp_matches(email,'^[a-zA-Z0-9]{4}[0-9]{6}') as pattern
from table
limit 10

此外,如果模式要匹配整个记录,请在模式的末尾添加$(字符串结尾)锚点:

'^[a-zA-Z0-9]{4}[0-9]{6}$'