PostgreSQL正则匹配电话号码报错:量词操作数无效求助
PostgreSQL正则匹配电话号码报错的解决办法
错误ERROR: invalid regular expression: quantifier operand invalid的根源是:你使用的正则是**扩展正则表达式(ERE)语法,但PostgreSQL的~操作符默认采用基本正则表达式(BRE)**模式,两种模式的元字符规则不同,导致语法解析失败。
解决步骤
方法1:切换到ERE模式(推荐)
在正则字符串前添加E前缀,即可使用ERE语法,无需大量转义元字符。修改后的正则如下:
~'E^([0-9]( |-)?)?(\\(?[0-9]{3}\\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$'
方法2:将正则转换为BRE格式
如果坚持使用BRE模式,需要对所有ERE元字符转义:
- 分组
()改为\(和\) - 或操作
|改为\| - 量词
?改为\? - 重复次数
{n}改为\{n\}
修改后的正则:
~'^\\([0-9]\\( \\|\\-\\)\\?\\)?\\(\\(\\(?[0-9]\\{3\\}\\)?\\|[0-9]\\{3\\}\\)\\( \\|\\-\\)\\?\\(\\([0-9]\\{3\\}\\( \\|\\-\\)\\?[0-9]\\{4\\}\\|[a-zA-Z0-9]\\{7\\}\\)\\)$'
优化建议
你可以把正则里的( |-)替换为字符类[ -],让正则更简洁易读,优化后的ERE版本:
~'E^([0-9][ -]?)?(\\(?[0-9]{3}\\)?|[0-9]{3})[ -]?([0-9]{3}[ -]?[0-9]{4}|[a-zA-Z0-9]{7})$'
内容的提问来源于stack exchange,提问作者Derek Scott
相关产品推荐
相关产品推荐

