请帮助我优化以下正则表达式以获得最佳性能。我已经阅读了一些文章,但这个问题应该迅速解决,以减少CPU使用和延迟时间,所以我没有足够的时间尝试和虚假。
第一个应匹配例如
http://microsoft.com/test/temp.iso
http://download.microsoft.com/TEMP.iso
注意:
所有网址都应该以{{1}}开头,所以我不知道最初放置http://
是不是更好?
第一行和最后一行有特定规则,但它们之间的行可以合并。
任何帮助表示感谢。
^http://
编辑:这些正则表达式用于squid configuration
答案 0 :(得分:3)
优化正则表达式的一些提示:
首先,使用.*
可能会导致性能问题,具体取决于您匹配的字符串的大小以及匹配在字符串中的结束时间。试试.*?
,看看是否有帮助。如果您了解有关.
匹配的性质的更多详细信息,则可能会找到更快的替代品。
其次,如果您的正则表达式引擎支持它,并且您实际上不需要从匹配中提取捕获组,则可以使它们不被捕获。这样可以提供小而稳定的性能提升。在Ruby中,非捕获组看起来像:(?:PUT CONTENTS HERE)
。
一点建议:你说你想“快速解决这个问题”但是“没有时间”进行反复试验。对不起,如果你想要最好的表现,你将不得不做自己的基准测试,找到你的语言和数据集中最快的。像我这样的所有人都可以为您提供一些建议,说明在您对替代解决方案进行基准测试时要尝试的事项。
答案 1 :(得分:0)
根据编程语言,您可以在程序启动时编译此正则表达式,然后只重用正则表达式对象。在C#中它看起来像这样:
Regex regex = new Regex(pattern, RegexOptions.Compiled);
编译正则表达式需要花费更多时间,但如果你多次使用它,那就值得。