如何用正则表达式匹配不含指定合法域名的钓鱼邮件名称
匹配钓鱼邮件的正则表达式解决方案
需求:匹配所有包含John Smith(不区分大小写)的邮件行,排除其中域名是mymail.com的合法邮件。
示例输入
John Smith (notmyemail@sodifh.com) John Smith (notmyemail@SODI.com) John Smith (jsmit34@gmail.com) John Smith (myRealEmail@mymail.com)
其中仅最后一行需要被排除。
你之前尝试的问题分析
- 第一个正则逻辑错误:
@^((?i)\bmymail\.com\b)*$部分写法混乱,^在这里是行首符号,不能用来否定域名,导致无法正确匹配非法邮件。 - 第二个正则范围过窄:仅排除了
gmail.com的邮件,无法覆盖其他非法域名。
正确正则表达式
写法1(需开启工具的不区分大小写模式)
^John Smith.*@(?!mymail\.com\b).+$
写法2(内置不区分大小写标记,无需额外设置)
(?i)^John Smith.*@(?!mymail\.com\b).+$
正则解释
(?i):内置不区分大小写标记,自动匹配john smith、John Smith、JOHN SMITH等所有大小写组合。^John Smith:匹配行首的"John Smith"(不区分大小写)。.*:匹配@符号前的任意字符(比如括号里的用户名部分)。@(?!mymail\.com\b):关键的否定预查,确保@后面紧跟的不是完整的mymail.com域名;\b是单词边界,避免误排除mymail.com.cn这类包含合法域名片段的非法地址。.+$:匹配非法域名部分直到行尾。
效果验证
- 匹配:前三行钓鱼邮件
- 不匹配:最后一行合法邮件
内容的提问来源于stack exchange,提问作者MBF
相关产品推荐
相关产品推荐

