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

PostgreSQL中如何让REGEXP_MATCHES返回唯一正则匹配结果?

解决PostgreSQL提取唯一哈希标签的问题

嘿,这个问题其实很常见——REGEXP_MATCHES的'g'标志会返回所有匹配项,包括重复的,所以咱们只需要加个去重步骤就能搞定。给你两种实用的方案:

方案1:直接返回去重后的哈希标签行

你可以用DISTINCT关键字对REGEXP_MATCHES的结果去重,这样就能得到每个唯一的哈希标签:

SELECT DISTINCT hashtag
FROM REGEXP_MATCHES(
    'this has #abc and also #def and another #abc and even an #bc',
    '(#[A-Za-z0-9_]+)',
    'g'
) AS matches(hashtag);

执行这个查询后,结果会是:

hashtag
---------
 #abc
 #def
 #bc

方案2:将唯一哈希标签聚合成数组

如果你希望结果是一个包含所有唯一标签的数组,可以用ARRAY_AGG配合DISTINCT,还能顺便排序:

SELECT ARRAY_AGG(DISTINCT hashtag ORDER BY hashtag) AS unique_hashtags
FROM REGEXP_MATCHES(
    'this has #abc and also #def and another #abc and even an #bc',
    '(#[A-Za-z0-9_]+)',
    'g'
) AS matches(hashtag);

这个查询会返回:

unique_hashtags
-----------------
 {#abc,#bc,#def}

补充说明

你的正则表达式'(#[A-Za-z0-9_]+)'是没问题的,符合大多数平台哈希标签的规则(仅包含字母、数字和下划线,以#开头)。如果需要支持其他字符(比如连字符),只需要把正则调整为'(#[A-Za-z0-9_-]+)'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:52:27