C# 使用模式vs编译的正则表达式C初始化正则表达式#

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是什么?第一个选项创建一个新正则表达式,并且: 所以第一个和第二个几

如果您需要确保在最初实例化Regex对象时只对表达式语法求值一次,那么正确的答案是什么

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);
            }