C#中Regex.Match的静态版本与实例版本
我注意到一些使用静态方法的代码:
Regex.IsMatch([someRegexStr], [someInputStr])
是否值得用实例方法替换它? 喜欢:
private readonly Regex myRegex = new Regex([someRegexStr]); ... myRegex.IsMatch([someInputStr]);
以下链接中的正则表达式优化建议之一: Jim Mischel的 正则表达式优化
为了在常用的正则表达式上获得更好的性能,请构造一个Regex对象并调用其实例方法。
本文包含一些有趣的主题,例如缓存正则表达式和编译正则表达式以及优化建议。
调用静态Regex.IsMatch()
方法时会发生一些初始处理 – 主要是validation正则表达式并将其转换为有限状态机表示。
如果您计划多次运行相同的正则表达式匹配,则最好实例化Regex实例并调用实例IsMatch()方法。 您可以使用RegexOptions.Compiled
标志将epxression编译为CLR字节码,从而进一步提高性能。
是的,特别是如果你可以使它成为一个编译表达式。 以这种方式构造Regex
对象的速度较慢,但用于获胜的速度要快得多。
编辑:可能(可能是++)更快。 没有要求CLI有一个很好的优化,但我猜测微软当然是。 :d
private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled);
缓存从静态调用创建的最后15个正则表达式内部表示。
我在谈论这个以及“ .NET正则表达式如何真正起作用”中的内部工作 。