title: RegEx.IsMatch() vs. String.ToUpper().Contains() performance
body: <p>Since there is no case insensitive <code>string.Contains()</code> (yet a case insensitive version of <code>string.Equals()</code> exists which baffles me, but I digress) in .NET, What is the performance differences between using <code>RegEx.IsMatch()</code> vs. using <code>String.ToUpper().Contains()</code>?</p>
  
  <p>Example:</p>
  
  <pre><code>string testString = "tHiSISaSTRINGwiThInconSISteNTcaPITaLIZATion";
  
  bool containsString = RegEx.IsMatch(testString, "string", RegexOptions.IgnoreCase);
  bool containsStringRegEx = testString.ToUpper().Contains("STRING");
  </code></pre>
  
  <p>I've always heard that <code>string.ToUpper()</code> is a very expensive call so I shy away from using it when I want to do <code>string.Contains()</code> comparisons, but how does <code>RegEx.IsMatch()</code> compare in terms of performance?  </p>
  
  <p>Is there a more efficient approach for doing such comparisons?</p>