title: Slow Regex performance
body: <p>The code below contains a regular expression designed to extract a C# string literal but the performance of the regex matching for input strings of more than a few characters is woeful. </p>
  
  <pre><code>class Program
  {
     private static void StringMatch(string s)
      {
          // regex: quote, zero-or-more-(zero-or-more-non-backslash-quote, optional-backslash-anychar), quote
          Match m = Regex.Match(s, "\"(([^\\\\\"]*)(\\\\.)?)*\"");
          if (m.Success)
              Trace.WriteLine(m.Value);
          else
              Trace.WriteLine("no match");
      }
  
      public static void Main()
      {
          // this first string is unterminated (so the match fails), but it returns instantly
          StringMatch("\"OK");
  
          // this string is terminated (the match succeeds)
          StringMatch("\"This is a longer terminated string - it matches and returns instantly\"");
  
          // this string is unterminated (so the match will fail), but it never returns
          StringMatch("\"This is another unterminated string and takes FOREVER to match");
      }
  }
  </code></pre>
  
  <p>I can refactor the regex into a different form, but can anyone offer an explanation why the performance is so bad?</p>