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

PostgreSQL 16中如何获取正则表达式的第二个匹配结果?

PostgreSQL 16 获取正则第二个匹配值的方法

你的原查询有两个核心问题:

  1. regexp_matches 默认只返回第一个匹配结果,不加全局匹配标志不会输出所有符合条件的行;
  2. 你的正则表达式里只有一个捕获组 (\d+)%,用 [2] 访问不存在的第二个捕获组,自然返回空。

要获取第二个匹配值,正确操作如下:

  • 给正则加上 g 全局匹配标志,让函数返回所有匹配结果;
  • 定位到第二行结果,再取唯一捕获组的值(用 [1])。

方法一:用 OFFSET 直接定位第二行

SELECT (regexp_matches('Main fabric: 50% Organic Cotton, 49% Cotton, 1% Elastane', '\b(\d+)%', 'g'))[1]
OFFSET 1 LIMIT 1;

执行后会直接返回第二个匹配的数值 49。

方法二:聚合为数组后取第二个元素

如果需要保留所有匹配结果后续复用,可以先把所有值聚合为数组,再访问第二个元素:

SELECT (array_agg(match[1]))[2]
FROM regexp_matches('Main fabric: 50% Organic Cotton, 49% Cotton, 1% Elastane', '\b(\d+)%', 'g') AS match;

同样会得到预期的 49。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:52:06