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

PostgreSQL含特殊字符查询问题:如何将'|'视为普通字符

解决PostgreSQL正则匹配中把|当作普通字符的问题

你的问题出在PostgreSQL的正则表达式语法里,|是代表“或”的元字符,所以原查询实际是在匹配词首的Founder of JoJoWorld或者词首的Python,而不是包含完整Founder of JoJoWorld | Python的内容。要把|当作普通字符处理,有两种实用方法:

方法1:手动转义特殊字符

如果查询文本是固定的,直接把|转义成\\|(因为SQL字符串里反斜杠需要额外转义),修改后的查询代码如下:

SELECT * FROM "main_parse_user" 
WHERE ("main_parse_user"."bio"::text ~* '\mFounder of JoJoWorld \| Python' 
OR "main_parse_user"."first_name"::text ~* '\mFounder of JoJoWorld \| Python')

这样正则引擎就会把|当作普通的竖线字符处理,只会匹配包含完整目标字符串的内容。

方法2:自动转义所有正则元字符

如果查询文本是动态生成(比如来自用户输入),不确定会包含哪些正则特殊字符(比如.、*、?等),可以用regexp_replace自动转义所有元字符,这样不管有没有特殊字符都能正常匹配:

-- 假设$search_text是你的查询文本变量
SELECT * FROM "main_parse_user" 
WHERE (
  "main_parse_user"."bio"::text ~* '\m' || regexp_replace($search_text, '([\^\$\.\*\+\?\(\)\[\]\{\}\|\\])', '\\\1', 'g')
  OR "main_parse_user"."first_name"::text ~* '\m' || regexp_replace($search_text, '([\^\$\.\*\+\?\(\)\[\]\{\}\|\\])', '\\\1', 'g')
)

这个方法会把所有正则元字符都转义成普通字符,既解决了|的问题,也能兼容没有特殊字符的查询文本。

内容的提问来源于stack exchange,提问作者Qadyr Israfilov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:40:33