C# – How to specify to only match first occurrence

cregex

How can I specify to only match the first occurrence of a regular expression in C# using Regex method?

Here's an example:

string text = @"<link href=""/_layouts/OracleBI/OracleBridge.ashx?RedirectURL=res/sk_oracle10/b_mozilla_4/common.css"" type=""text/css"" rel=""stylesheet""></link></link>";
string pattern = @"(<link).+(link>)";
Regex myRegex = new Regex(pattern, RegexOptions.IgnoreCase);

Match m = myRegex.Match(text);   // m is the first match
while (m.Success)
{
    // Do something with m
    Console.Write(m.Value + "\n");
    m = m.NextMatch();              // more matches
}
Console.Read();

I would like this to only replace up to the first <\link>. And then also do the same for the rest of these matches.

Best Answer

Regex.Match(myString) returns the first match it finds.

Subsequent calls to NextMatch() on the resultant object from Match() will continue to match the next occurrences, if any.

For example:

  string text = "my string to match";
  string pattern = @"(\w+)\s+";
  Regex myRegex = new Regex(pattern, RegexOptions.IgnoreCase);

  Match m = myRegex.Match(text);   // m is the first match
  while (m.Success)
  {
       // Do something with m

       m = m.NextMatch();              // more matches
  }


EDIT: If you're parsing HTML, I would seriously consider using the HTML Agility Pack. You will save yourself many, many headaches.