我正在尝试运行正则表达式命令来解析收到的电子邮件,以识别任何由试图使用我们公司名称变体的虚假/钓鱼网站发送的超链接。我们的公司是 abcdomain。标准是:
- 查找包含我们公司名称“abcdomain”的所有超链接(主机名部分)
- 排除所有我们自己注册的域名,即myabcdomain.com,site.abcdomain.com,abcdomain.net等)
我的正则表达式格式不正确,在某些变体下无法工作。问题可能与我的排除方式有关。起初,我确实试图排除“abcdomain.com”,但正则表达式似乎无法正常工作。
- 询问:
(http[s]?|ftp)\S*?(abcdomain|myabcdomain)(?!\.com)
- 细绳:
http://www.abcdomain.com/logo/email/abcdomain-email-logo.png
结果:应该是排除但查询命中了第二个 abcdomain
询问:
(http[s]?|ftp):\/\/([\dA-Za-z\.]*)(abcdomain|myabcdomain)(?!.com|..net)
- 细绳:
http://www.fakeabcdomain.com
- 结果:应该是包括但我的排除只关注命中结果)
答案1
这一个适用于您的测试用例:
(?:ht|f)tps?://(?=[^/]*(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?))(?!(?:\w+\.)?(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?)\.com)\S+
解释:
(?:ht|f)tps?:// : protocol
(?= : positive lookahead, make sure we have after
[^/]* : 0 or more non slash
(?: : start non capture group
myabcdomain : literally
| : OR
abcabcdomain : literally
| : OR
abcdomain : literally
(?:\.zendesk)? : followed with optional
) : end group
) : end lookahead
(?! : negative lookahead, make sure we don't a=have after
(?:\w+\.)? : optional, 1 or more word character and a dot
(?: : start non capture group
myabcdomain : literally
| : OR
abcabcdomain : literally
| : OR
abcdomain : literally
(?:\.zendesk)? : followed with optional
) : end group
\.com : literally
) : end lookahead
\S+ : 1 or more any character that is not a space
它匹配:
<a href="http://abcdomain.products.com.vbs">
<a href="https://abcdomainproducts.com">
<a href="http://products.abcdomain.products.net">
<a href="https://products.abcdomainproducts.com/test">
<a href="http://fakeabcdomain.products.com.vbs">
<a href="http://myabcdomain.products.com.vbs">
<a href="http://fakeabcdomain.com">
并且不匹配:
<a href="http://products.myabcdomain.com/help">
<a href="http://abcdomain.zendesk.com/help">
<a href="http://myabcdomain.com/help">
<a href="http://abcdomain.com/help">
<a href="http://products.abcabcdomain.com">