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

PostgreSQL正则匹配中如何将整个输入字符串作为普通字符串处理?

解决方案

你的匹配失败问题确实是*、+属于正则元字符,会被解析为正则语法规则而非普通文本导致的。你可以使用PostgreSQL内置的regexp_escape()函数对输入的过滤字符串做预处理,该函数会自动转义所有正则特殊字符,将其转为普通文本参与匹配。

修改后的可运行代码如下:

do $$ declare 
    jdata jsonb='[{"name":"Dog 3*240+1*120"}]'::jsonb;
    vfilter1 text='dog';
    vfilter2 text='3*240+1*120';
    vexists bool=false;
begin 
    select jdata @? concat('$[*] ? (@.name like_regex "',regexp_escape(vfilter1),'" flag "i")')::jsonpath into vexists;
    raise notice 'exists:%',vexists; -- 执行结果为true
    select jdata @? concat('$[*] ? (@.name like_regex "',regexp_escape(vfilter2),'" flag "i")')::jsonpath into vexists;
    raise notice 'exists:%',vexists; -- 执行结果为true
end;
$$ language plpgsql;

regexp_escape会自动处理所有正则元字符,包括. * + ? | ( ) [ ] { } ^ $ \,无需手动编写替换逻辑,同时也能避免正则注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:07