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

PostgreSQL正则匹配删除含for/while的双引号包裹子串问题求解

问题原因

你之前的正则表达式使用了贪婪匹配规则的.*,会从文本中第一个双引号开始,一直匹配到最后一个双引号结束,因此误删了所有双引号包裹的内容。

正确实现方案

我们需要限制匹配范围为单个双引号对内部,通过[^"]匹配非双引号的字符,避免跨双引号匹配:

SELECT regexp_replace(
   'PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", "> Table for loading: "||cc.source_table_name , false, null::text, 0);',
   '"[^"]*(for|while)[^"]*"',
   '',
   'g'
);

执行后得到的正确结果为:

PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", ||cc.source_table_name , false, null::text, 0);
正则说明
  • ":匹配双引号的开头
  • [^"]*:匹配任意数量、除了双引号之外的字符,确保不会跨到其他双引号包裹的段落
  • (for|while):匹配目标关键字for或者while
  • [^"]*:匹配关键字之后、双引号之前的所有非双引号字符
  • ":匹配双引号的结尾
  • 末尾的g参数代表全局替换,如果你需要同时忽略关键字的大小写(比如匹配For、WHILE等写法),可以把参数改成gi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:45:06