You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL正则表达式字符类元素顺序影响匹配的原因及文档说明问询

PostgreSQL SIMILAR TO正则字符类匹配异常原因解析

问题根源:连字符在字符类中的特殊解析规则

在SIMILAR TO的字符类([])语法里,连字符(-)默认是范围运算符(比如a-z表示匹配a到z的所有字母)。只有当它出现在字符类的开头或结尾时,才会被当作普通字符处理。

你写的无效表达式[[:alnum:]._-]里,._-的位置导致连字符被当成了范围运算符:
ASCII编码中,.的码值是46,-是45,._-会被解析为“从.到-的字符范围”——但这个范围是无效的(因为起始码值大于结束码值),所以这部分不会匹配任何字符。整个字符类实际只有[:alnum:]生效,自然匹配不到_、.和-。

而有效表达式[-_.[:alnum:]]把连字符放在了字符类的最开头,此时它被视为普通字符,-、_、.都被加入匹配集合,再结合[:alnum:],就能正确匹配所有需要的字符。

官方文档说明

PostgreSQL官方文档明确记录了这一规则:在SIMILAR TO的字符类中,若要将连字符作为普通字符匹配,必须将其放在字符类的开头、结尾,或者使用反斜杠转义(需注意SQL语境下的转义规则)。同时,SIMILAR TO遵循SQL标准的正则语法,这一行为也符合SQL标准的定义。

内容的提问来源于stack exchange,提问作者Kevin Holway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:42:48