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