RegEx返回多个非重复匹配

RegEx返回多个非重复匹配,regex,regex-group,Regex,Regex Group,我有以下模式,与结尾包含长字符串的URL相匹配,这在垃圾邮件中很常见。一些垃圾邮件会重复相同的长字符串,因此使用{4,}来检测具有相同URL的电子邮件效果很好,但是如果每个URL的长字符串不同,则会失败。如何扩展此模式以返回“不匹配”,除非找到至少4个此模式?我试着用一个?在每次复制之间,但复制两次之后,regex101开始给出错误 /(?:(href|src).+?[\w\-\s]{30,}")/g 带有更好解释的演示链接:这个答案确实属于@degant,但我不知道如何将他的评论标记为答案,

我有以下模式,与结尾包含长字符串的URL相匹配,这在垃圾邮件中很常见。一些垃圾邮件会重复相同的长字符串,因此使用{4,}来检测具有相同URL的电子邮件效果很好,但是如果每个URL的长字符串不同,则会失败。如何扩展此模式以返回“不匹配”,除非找到至少4个此模式?我试着用一个?在每次复制之间,但复制两次之后,regex101开始给出错误

/(?:(href|src).+?[\w\-\s]{30,}")/g

带有更好解释的演示链接:

这个答案确实属于@degant,但我不知道如何将他的评论标记为答案,而且我还是稍微调整了一下他的答案

/(?:(?:(href|src)[\s\S]+?[\w\-\s]{30,}")[\s\S]*?){4,}?/s
这是新的模式。它匹配HTML代码(垃圾邮件中常用的“a href”和“img src”类型)中包含30个或更多字符的字符串的所有URL,这是spambots用来欺骗垃圾邮件捕获者的随机数发生器的典型特征,同时仍然可用作电子邮件捕获链接


再次感谢@degant和@trincot的帮助

这就是你想要的吗?如果至少有四个URL(您提到的格式)是present@degant,您需要的是
s
修饰符,而不是
m
;然后你可以使用
*
。啊,是的@trincot my bad。但是等等——它实际上破坏了OP的模式(也包括一个点),如果
匹配新行,那么模式就不能正常工作。这是正则表达式的糟糕用法。你应该以编程的方式计算匹配的数量,而不是在匹配中包含垃圾邮件。Jonas,我不是在这里编程,我只是在寻找我的反垃圾邮件过滤器可以寻找的正则表达式模式。如果我有一种方法使用我的原始模式,并有一些东西说“哦,4个匹配?太好了,这是垃圾邮件”,那么我会被设置,但相反,我需要模式本身得出这个结论,并且不返回任何匹配,除非有4个以上的匹配。