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

如何使用Go RE2正则语法创建过滤除.co/.us外的ccTLD邮箱过滤器?

解决方案:兼容Go RE2的ccTLD过滤正则

需求明确

需要匹配邮件发件人@之后的域名部分,筛选出除.co和.us外的所有国家顶级域名(ccTLD,通常为2字母后缀),用于隔离垃圾邮件与恶意软件。由于Go采用RE2正则引擎,不支持零宽断言(前瞻/后顾),需使用兼容语法实现。

最终正则表达式

// 不区分大小写版本,适配邮箱域名的大小写变体
regex := regexp.MustCompile(`(?i)@[a-z0-9.-]+\.(?:[a-df-z][a-z]|c[a-df-z]|u[a-tv-z])`)

正则规则拆解

  • (?i):开启不区分大小写匹配,避免因域名大小写差异漏匹配
  • @:精准匹配发件人地址中的@分隔符
  • [a-z0-9.-]+:匹配@后的域名主体部分,支持字母、数字、点号和连字符,覆盖多级域名场景(如sub.domain.uk)
  • \.:匹配域名后缀前的点号
  • 非捕获分组(?:...)组合排除逻辑:
    • [a-df-z][a-z]:匹配首字母非c/u的2字母后缀(如.uk、.ca)
    • c[a-df-z]:匹配首字母为c但次字母非o的后缀(如.cn、.cu)
    • u[a-tv-z]:匹配首字母为u但次字母非s的后缀(如.au、.uy)

Go代码使用示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	testSenders := []string{
		"spammer@example.uk",   // 应触发隔离(.uk为ccTLD)
		"legit@example.co",     // 应放行(排除.co)
		"malware@example.us",   // 应放行(排除.us)
		"user@sub.au",          // 应触发隔离(.au为ccTLD)
		"admin@domain.cn",      // 应触发隔离(.cn为ccTLD)
	}

	filterRegex := regexp.MustCompile(`(?i)@[a-z0-9.-]+\.(?:[a-df-z][a-z]|c[a-df-z]|u[a-tv-z])`)

	for _, sender := range testSenders {
		if filterRegex.MatchString(sender) {
			fmt.Printf("隔离邮件:%s\n", sender)
		} else {
			fmt.Printf("放行邮件:%s\n", sender)
		}
	}
}

重要提示

  1. RE2兼容性:本正则完全规避了RE2不支持的零宽断言语法,确保在Go环境中正常运行
  2. 域名范围调整:若仅需匹配单级域名(如user@domain.uk而非user@sub.domain.uk),可将[a-z0-9.-]+改为[a-z0-9-]+
  3. 后缀扩展:如需排除更多ccTLD,可在分组中追加对应规则(如排除.jp则添加|j[a-ik-z])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:23:10