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

求PostgreSQL查询语句:替换邮箱@符号前第3位后的字符

PostgreSQL 邮箱地址掩码:保留@前3位及@后内容,中间替换为*****

直接用下面的查询语句即可实现需求:

SELECT REGEXP_REPLACE(email, '^(.{3})([^@]+)(@.*)$', '\1*****\3') FROM "user";

逻辑拆解

  • 正则表达式各部分作用:
    • ^:匹配字符串起始位置,确保从邮箱开头开始处理
    • (.{3}):捕获@符号前的前3个字符,作为第一个分组(替换时用\1引用)
    • ([^@]+):捕获@符号前3位之后到@之前的所有字符([^@]+表示匹配任意非@的字符,至少1个),作为第二个分组
    • (@.*):捕获@符号及其后面的全部内容,作为第三个分组(替换时用\3引用)
  • 替换规则:用「前3位字符 + ***** + @及后续内容」的组合,直接替换掉@前3位之后到@之前的部分。

示例验证

输入:abcdefghijk@gmail.com

  • 分组1:abc
  • 分组2:defghijk
  • 分组3:@gmail.com
    替换后输出:abc*****@gmail.com,完全符合预期。

原语句问题说明

你之前写的REGEXP_REPLACE(email, '(.{3})(?!$)', '\1*****')逻辑不精准:(.{3})(?!$)是匹配任意3个字符且后面不是字符串结尾的位置,只会在abc后插入*****,但abc之后的defghijk@gmail.com会完整保留,所以结果不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:44:52