优化正则表达式以获得最大速度

时间:2013-10-26 15:38:57

标签: regex performance optimization cpu-usage

请帮助我优化以下正则表达式以获得最佳性能。我已经阅读了一些文章,但这个问题应该迅速解决,以减少CPU使用和延迟时间,所以我没有足够的时间尝试和虚假。

第一个应匹配例如

http://microsoft.com/test/temp.iso

http://download.microsoft.com/TEMP.iso

注意

  • 所有网址都应该以{{1​​}}开头,所以我不知道最初放置http://是不是更好?

  • 第一行和最后一行有特定规则,但它们之间的行可以合并。

任何帮助表示感谢。

^http://

编辑:这些正则表达式用于squid configuration

2 个答案:

答案 0 :(得分:3)

优化正则表达式的一些提示:

首先,使用.*可能会导致性能问题,具体取决于您匹配的字符串的大小以及匹配在字符串中的结束时间。试试.*?,看看是否有帮助。如果您了解有关.匹配的性质的更多详细信息,则可能会找到更快的替代品。

其次,如果您的正则表达式引擎支持它,并且您实际上不需要从匹配中提取捕获组,则可以使它们不被捕获。这样可以提供小而稳定的性能提升。在Ruby中,非捕获组看起来像:(?:PUT CONTENTS HERE)

一点建议:你说你想“快速解决这个问题”但是“没有时间”进行反复试验。对不起,如果你想要最好的表现,你将不得不做自己的基准测试,找到你的语言和数据集中最快的。像我这样的所有人都可以为您提供一些建议,说明在您对替代解决方案进行基准测试时要尝试的事项。

答案 1 :(得分:0)

根据编程语言,您可以在程序启动时编译此正则表达式,然后只重用正则表达式对象。在C#中它看起来像这样:

Regex regex = new Regex(pattern, RegexOptions.Compiled);

编译正则表达式需要花费更多时间,但如果你多次使用它,那就值得。