正则表达式查找至少重复 n 次的模式
Regex to find a pattern repeating at least n times
我被垃圾邮件摧毁了,电子邮件总是不同的,除了它们总是有类似的 link 像这样重复多次:
http://spam.com/hello/world/fk59j356jss5ptttNMdlJ96vmrDsjEeCPDXJf0fBXOi
所以我试图在我的服务器上放置一个过滤器,该过滤器将扫描一个斜杠后跟 30-50 个字母数字字符,然后至少重复 3 次。我写了以下正则表达式,但在 regex101.com 上,我不断收到 "timeout" 消息,可能是因为有更好的写法:
/(\/\w{30,50})(.+?){3,}/s
我尝试了 google,但我的搜索字词从未返回我想要的结果。
编辑
这是 link,您可以看到:
https://regex101.com/r/tL9wK7/2
我们可以通过总是重复的这部分来识别垃圾邮件 link:
/bcaip86eJR2W5hKmMjFiKVWmKyLjmiMKhkOm0Mjh906
垃圾邮件中总是有类似的内容(斜线后跟一系列字母数字字符)。 link 在每封垃圾邮件中都不同,但它会在同一封邮件中重复多次。
因此,如果在同一封电子邮件中多次出现 link 后跟 30-50 个字母数字字符的 link 电子邮件,则扫描该电子邮件将表明它是垃圾邮件。
这个怎么样?
/\/(\w{30,50})(?:.*)(?:.*)/sg
这将解决您的问题,给出满足条件的示例数据。当与 regex101 link.
一起使用时,您可以通过删除最后一个捕获组来查看它的工作情况
你可以试试这个(稍微修改你的正则表达式)-
(\/\w{30,50})(.*?){3,}
我相信我已经稍微改进了你的模式:
/(\/\w{30,})(?:.+?){3,}?/s
演示 link:https://regex101.com/r/aNdURv/1
主要变化:
1. 为什么止于 50 个字符?只要至少是 30,这个词有多长无关紧要。所以我从第一组中删除了“50”。
2. 您不需要捕获每个重复,只需将其计入您的目标总数(3 次或更多),所以我在第二组中添加了“?:”。
3. 你不需要它来找到所有匹配的重复,这意味着它可以是懒惰的,只要找到至少 3 个就可以停止。所以我加了“?”到最后。
我被垃圾邮件摧毁了,电子邮件总是不同的,除了它们总是有类似的 link 像这样重复多次:
http://spam.com/hello/world/fk59j356jss5ptttNMdlJ96vmrDsjEeCPDXJf0fBXOi
所以我试图在我的服务器上放置一个过滤器,该过滤器将扫描一个斜杠后跟 30-50 个字母数字字符,然后至少重复 3 次。我写了以下正则表达式,但在 regex101.com 上,我不断收到 "timeout" 消息,可能是因为有更好的写法:
/(\/\w{30,50})(.+?){3,}/s
我尝试了 google,但我的搜索字词从未返回我想要的结果。
编辑
这是 link,您可以看到: https://regex101.com/r/tL9wK7/2 我们可以通过总是重复的这部分来识别垃圾邮件 link:
/bcaip86eJR2W5hKmMjFiKVWmKyLjmiMKhkOm0Mjh906
垃圾邮件中总是有类似的内容(斜线后跟一系列字母数字字符)。 link 在每封垃圾邮件中都不同,但它会在同一封邮件中重复多次。
因此,如果在同一封电子邮件中多次出现 link 后跟 30-50 个字母数字字符的 link 电子邮件,则扫描该电子邮件将表明它是垃圾邮件。
这个怎么样?
/\/(\w{30,50})(?:.*)(?:.*)/sg
这将解决您的问题,给出满足条件的示例数据。当与 regex101 link.
一起使用时,您可以通过删除最后一个捕获组来查看它的工作情况你可以试试这个(稍微修改你的正则表达式)-
(\/\w{30,50})(.*?){3,}
我相信我已经稍微改进了你的模式:
/(\/\w{30,})(?:.+?){3,}?/s
演示 link:https://regex101.com/r/aNdURv/1
主要变化:
1. 为什么止于 50 个字符?只要至少是 30,这个词有多长无关紧要。所以我从第一组中删除了“50”。
2. 您不需要捕获每个重复,只需将其计入您的目标总数(3 次或更多),所以我在第二组中添加了“?:”。
3. 你不需要它来找到所有匹配的重复,这意味着它可以是懒惰的,只要找到至少 3 个就可以停止。所以我加了“?”到最后。