如何从Regex中排除某个单词?

bd1hkmkf  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(185)

我正在使用下面的正则表达式来从使用尖叫青蛙的网页中提取电子邮件地址

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+

但某些电子邮件类型,如下面包括这是无效的

ex: logo_large_LBI-300x112@2x.png

我需要尖叫青蛙排除这样的。png扩展名电子邮件类型
请有人帮助我更新regex遵循
我试过了,但没有运气,需要帮助。

g6ll5ycj

g6ll5ycj1#

从技术上讲,字符串logo_large_LBI-300x112@2x.png * 在语法上是一个有效的电子邮件地址。这就是它匹配regexp的原因。但实际上,你是对的,它可能不打算作为一个电子邮件地址,它不会作为一个工作(没有顶级域名命名为“png”…对不起,Papua New Guinea)。
不幸的是,将超过1500个现有顶级域的完整列表放入一个regexp中进行检查将非常难以操作。但您可以检查常见的图像文件扩展名并排除它们,如下所述。
如果Screaming Frog在其正则表达式中支持负lookahead,您可以使用如下内容:

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-.]+\.(?!(png|jpg)$)([a-zA-Z0-9-]+)$

(?!(png|jpg)$)是负先行,要求最后的“字”不匹配pngjpg。扩展列表以包括您认为必要的任何其他图像文件扩展名,例如。

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-.]+\.(?!(png|jpg|jpeg|gif|webp|heic)$)([a-zA-Z0-9-]+)$

只是一句警告,使用lookahead会大大降低正则表达式匹配的速度。你检查的扩展越多,它就越慢。
上面的regexp可能会优化得更好。

7uhlpewt

7uhlpewt2#

首先,你应该减少范围,a-zA-Z0-9_\w,它是相同的模式。
当您到达电子邮件地址中的.时,请使用负向前瞻。
[-.\w]+@[-.\w]+\.(?!png)[-.\w]+

相关问题