求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
相关产品推荐
相关产品推荐

