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

问题描述 投票:2回答:1

所以我在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}'可能不是最好的方法?任何建议将不胜感激。非常感谢!

regex postgresql
1个回答
2
投票

^[a-zA-Z0-9]{4}+[0-9]{6}模式与PostgreSQL正则表达式引擎不兼容,因为它不支持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}$'
© www.soinside.com 2019 - 2024. All rights reserved.