如何编写匹配顶级域非.com等指定后缀的URL正则表达式
匹配非指定TLD完整URL的正则表达式(适配Exchange Online)
需求说明
匹配顶级域不属于.com、.net、.org、.info、.edu、.gov、.ca的完整URL,用于Exchange Online入站邮件过滤,后续可灵活扩充排除的TLD列表。
最终可用正则
\bhttps?://[a-zA-Z0-9-._~:/?#[\]@!$&'()*+,;=%]+?\.(?!com|net|org|info|edu|gov|ca)([a-zA-Z]{2,})(?:/[a-zA-Z0-9-._~:/?#[\]@!$&'()*+,;=%]*)?\b
逻辑说明
- 开头边界符+
https?://:精准匹配URL的http/https协议头,避免误匹配文本中间的零散内容 - 非贪婪匹配域名段:匹配子域名、多级域名前缀,直到顶级域前的最后一个点
- 负向预查
(?!com|net|org|info|edu|gov|ca):核心过滤逻辑,排除指定TLD,后续新增排除项直接在括号内加|新后缀即可,比如要排除.uk则修改为(?!com|net|org|info|edu|gov|ca|uk) - 顶级域匹配+可选路径匹配:兼容带路径、参数、端口的完整URL格式
- 结尾边界符:确保匹配到完整的URL,不会截断内容
匹配效果验证
会被正则命中的URL(符合过滤规则)
https://www.example.ru:TLD为ru,不在排除列表http://www.example.xyz/index.php:TLD为xyz,不在排除列表https://someserver.example.co.uk/home:TLD为uk,不在排除列表
不会被正则命中的URL(不符合过滤规则)
https://www.example.com:TLD为com,在排除列表http://www.example.info/index.php:TLD为info,在排除列表https://someserver.example.ca/home:TLD为ca,在排除列表
Exchange Online配置注意事项
- 新建邮件流规则时,选择「邮件头或正文包含任何这些文本模式」的条件,直接填入上述正则即可
- 建议先将规则设置为测试模式,仅记录日志不拦截,运行1-2周确认无误后再开启拦截动作,避免误杀正常业务邮件
- Exchange Online正则默认不区分大小写,无需额外添加大小写匹配逻辑
内容的提问来源于stack exchange,提问作者Michael Nelson
相关产品推荐
相关产品推荐

