using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?=<ul\s+id=""matchMe""\s+type=""square""\s*>) # match start with <ul id=""matchMe""...
(?> # atomic group / don't backtrack (faster)
<!-- .*? --> | # match xml / html comment
<[^>]*/\s*> | # self closing tag
(?<opentag><(?!\s*/)[^>]*[^/]>) | # push opening xml tag
(?<-opentag><\s*/[^>]*[^/]>) | # pop closing xml tag
[^<>]* # something between tags
)* # match as many xml tags as possible
(?(opentag)(?!)) # ensure no 'opentag' groups are on stack";
string input = @"<html>
<body>
<div>
<br />
<ul id=""matchMe"" type=""square"">
<li>stuff...</li>
<li>more stuff</li>
<li>
<div>
<p>Lorem ipsum< /p>
<hr class=""important"" / >
<span>still more</span>
<ul>
<li>Another >ul<, oh my!</li>
<li>...</li>
</ul>
</div>
</li>
</ul>
</div>
</body>
</html>";
RegexOptions options = RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx