请帮助我优化以下正则表达式以获得最佳性能。我已经阅读了一些文章,但这个问题应该很快解决以减少 CPU 使用率并延迟时间,所以我没有足够的时间进行尝试和错误。
例如,第一个应该匹配
http://microsoft.com/test/temp.iso
http://download.microsoft.com/TEMP.iso
注:
-
所有 url 都应该以
http://
开头,所以我不知道最好先放^http://
? -
第一行和最后一行有特定的规则,但它们之间的行可以合并。
任何帮助表示赞赏。
refresh_pattern -i (.+.||)(microsoft|windowsupdate).com/.*.(cab|exe|dll|ms[i|u|f]|asf|wm[v|a]|dat|zip|iso|psf)
refresh_pattern -i (.+.||)eset.com/.*.(cab|exe|dll|ms[i|u|f]|asf|wm[v|a]|dat|zip|ver|nup)
refresh_pattern -i (.+.||)avg.com/.*.(cab|exe|dll|ms[i|u|f]|asf|wm[v|a]|dat|zip|ctf|bin|gz)
refresh_pattern -i (.+.||)grisoft.(com|cz)/.*.(cab|exe|dll|ms[i|u|f]|asf|wm[v|a]|dat|zip|ctf|bin|gz)
refresh_pattern -i (.+.||)avast.com/.*.(cab|exe|dll|ms[i|u|f]|asf|wm[v|a]|dat|zip|vpx|vpu|vpa|vpaa|def|stamp)
refresh_pattern -i (.+.||)(kaspersky-labs|kaspersky).com/.*.(cab|zip|exe|msi|msp|bz2|avc|kdc|klz|dif|dat|kdz|kdl|kfb)
refresh_pattern -i (.+.||)nai.com/.*.(gem|zip|mcs|tar|exe|)
refresh_pattern -i (.+.||)adobe.com/.*.(cab|aup|exe|msi|upd|msp)
refresh_pattern -i (.+.||)symantecliveupdate.com/.*.(zip|exe|msi)
refresh_pattern -i (.+.||)(192.168.10.34|mywebsite.com)/.*
编辑:这些正则表达式用于鱿鱼配置
优化正则表达式的几个技巧:
首先,使用 .*
可能会导致性能问题,具体取决于要匹配的字符串的大小以及匹配通常在字符串中结束的早短。尝试.*?
,看看是否有帮助。如果您了解有关.
匹配的性质的更多详细信息,则有可能找到更快的替代品。
其次,如果您的正则表达式引擎支持它,并且您实际上不需要从匹配中提取捕获组,则可以使它们不捕获。这提供了小而一致的性能提升。在 Ruby 中,非捕获组如下所示:(?:PUT CONTENTS HERE)
。
有一点建议:你说你想"快速解决这个问题",但"没有时间"进行反复试验。很抱歉,如果您想要获得最佳性能,则必须进行自己的基准测试,并找到您的语言和数据集中最快的内容。所有像我这样的人所能做的就是给你一些建议,告诉你在对替代解决方案进行基准测试时要尝试什么。
根据编程语言的不同,您可以在程序启动时编译此正则表达式,然后重用正则表达式对象。在 C# 中,它看起来像这样:
Regex regex = new Regex(pattern, RegexOptions.Compiled);
编译正则表达式需要更多时间,但如果您多次使用它,那就值得了。