C# 使用模式vs编译的正则表达式C初始化正则表达式#
如果您需要确保在最初实例化Regex对象时只对表达式语法求值一次,那么正确的答案是什么C# 使用模式vs编译的正则表达式C初始化正则表达式#,c#,regex,C#,Regex,如果您需要确保在最初实例化Regex对象时只对表达式语法求值一次,那么正确的答案是什么 var regExpPattern = @"somepatternhere"; Regex.Match(输入,regExpPattern) var evaluate=newregex(regExpPattern) var evaluate=newregex(regExpPattern,RegexOptions.Compiled) 答案2或3是什么?第一个选项创建一个新正则表达式,并且: 所以第一个和第二个几
var regExpPattern = @"somepatternhere";
Regex.Match(输入,regExpPattern)代码>
var evaluate=newregex(regExpPattern)代码>
var evaluate=newregex(regExpPattern,RegexOptions.Compiled)代码>
答案2或3是什么?第一个选项创建一个
新正则表达式,并且:
所以第一个和第二个几乎是一样的东西
正如已经说过的,最后一个将是漫长的创造,但更快的使用
简而言之,如果您计划只使用一次正则表达式,请使用1)或2)。如果您计划多次运行循环或使用正则表达式,请选择第三种解决方案。2和3的区别在于性能。2-创建对象速度快,但执行速度慢。3-创建对象速度慢,执行速度快(将正则表达式编译为IL)。1和2之间有什么区别吗?关于如何编译正则表达式,有一个很好的答案does@sortednoun,视情况而定。在第1种情况下,方法寻找一个内部缓存或正则表达式,如果没有,则创建一个新对象并放入缓存。如果您有许多正则表达式,那么最终可能会出现持续的缓存未命中。找到了关于其工作原理的精彩解释:
static MatchCollection Matches(String input, String pattern, RegexOptions options, TimeSpan matchTimeout) {
return new Regex(pattern, options, matchTimeout, true).Matches(input);
}