我应该创建一个复杂的RegEx还是多个不太复杂的RegEx?

时间:2012-03-16 07:35:45

标签: regex performance

我应该创建一个复杂的RegEx来处理所有现有案例,还是应该在多个正则表达式中打破一个复杂的RegEx?

我关注使用复杂正则表达式的性能。 将复杂的Regex打造成更小的简单正则表达式会更好吗?

3 个答案:

答案 0 :(得分:4)

如果您想要对性能问题做出有意义的回答,则需要对两种情况进行基准测试。

关于可读性/可维护性,您可以使用任何语言编写不可读的代码,因此您可以使用正则表达式。如果你写一个大的,请务必使用x修饰符(c#中的IgnorePatternWhitespace)并使用注释来构建正则表达式。

我在c#中的一个过去答案中随机选择的示例:

MatchCollection result = Regex.Matches
    (testingString,
        @"       
            (?<=\$)  # Ensure there is a $ before the string
            [^|]*    # Match any character that is not a |
            (?=\|)   #Till a | is ahead
        "
        , RegexOptions.IgnorePatternWhitespace);

答案 1 :(得分:2)

由于编译器优化,我认为现在不会有太大差异,但是,使用简单的方法可以更容易理解代码,从而使维护更容易。

答案 2 :(得分:-1)

复杂的正则表达式可能非常慢,但它取决于您的正则表达式和您的环境。以string.trim()为例。它可以通过正则表达式轻松实现。您可以使用一个正则表达式或两个正则表达式(分别删除前面和后面的空格)。这里有人采用了11种不同的javascript修剪实现,并在不同的浏览器中对它们进行了基准测试:http://blog.stevenlevithan.com/archives/faster-trim-javascript。在这种情况下,一个正则表达式在大多数情况下都会失去很多时间。