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

PostgreSQL中regexp_matches()匹配字符串结尾失效问题排查

问题原因分析及排查方案

核心原因:数据库提取的字符串末尾存在不可见字符

你单独测试时用的是手动复制的「干净」字符串,但从jsonb列提取出的原始字符串末尾大概率藏着换行符(\n)、回车符(\r)、空格或制表符这类肉眼看不到的字符。正则里的$是严格匹配字符串的实际结尾位置,如果20 mg/kg后面还有隐形字符,自然匹配不到结尾。

其他可能的次要原因

  • jsonb转义残留:如果原始jsonb中的字符串带有转义序列(比如\\n),提取时若未正确处理,会导致实际字符串包含转义后的控制字符,干扰结尾匹配。
  • 正则模式误用:若不小心开启了多行模式(m修饰符),$会匹配每行的结尾而非整个字符串的结尾,和你单独测试的无修饰符场景产生差异。

快速排查验证方法

  1. 检查字符串实际长度:

    SELECT length(your_jsonb_column->>'target_key') AS str_length, octet_length(your_jsonb_column->>'target_key') AS byte_length FROM your_table WHERE ...;
    

    对比你单独测试的字符串长度,数值不一致则说明存在不可见字符。

  2. 匹配末尾空白字符:
    把正则改成'20 mg/kg\s*$',如果能匹配到,就证明末尾有空白类隐形字符。

  3. 清理后再匹配:
    用trim()去除字符串首尾空白后执行匹配:

    SELECT regexp_matches(trim(your_jsonb_column->>'target_key'), '20 mg/kg$') FROM your_table WHERE ...;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:12:35