using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(([a-hKQNB]x)?(R[1-8]?[a-f]?x)?[KQNBR]?[abcdefgh]([1-8]{1}(?!=))(\(ep\))?((?<=[18])=[KQNBR])?\+{,2}|0(-0){1,2})";
string input = @" <dt>e4</dt><dd>match</dd>
<dt>a8</dt><dd>match</dd>
<dt>g5</dt><dd>match</dd>
<dt>h7</dt><dd>match</dd>
<dt>a1</dt><dd>match</dd>
<dt>Kd2</dt><dd>match</dd>
<dt>Kg6</dt><dd>match</dd>
<dt>Qh4</dt><dd>match</dd>
<dt>Qe2</dt><dd>match</dd>
<dt>Qb7</dt><dd>match</dd>
<dt>Nf2</dt><dd>match</dd>
<dt>Nc6</dt><dd>match</dd>
<dt>Be4</dt><dd>match</dd>
<dt>Bf3</dt><dd>match</dd>
<dt>Bb2</dt><dd>match</dd>
<dt>Ra1</dt><dd>match</dd>
<dt>Rc3</dt><dd>match</dd>
<dt>Rh8</dt><dd>match</dd>
<dt>0-0</dt><dd>match</dd>
<dt>0-0-0</dt><dd>match</dd>
<dt>exd5</dt><dd>match</dd>
<dt>axb7</dt><dd>match</dd>
<dt>exd2</dt><dd>match</dd>
<dt>Bxc6</dt><dd>match</dd>
<dt>Bxa4</dt><dd>match</dd>
<dt>Qxe2</dt><dd>match</dd>
<dt>Qxb7</dt><dd>match</dd>
<dt>Nxf2</dt><dd>match</dd>
<dt>Nxb2</dt><dd>match</dd>
<dt>Bxb2</dt><dd>match</dd>
<dt>Rxh8</dt><dd>match</dd>
<dt>Rxc3</dt><dd>match</dd>
<dt>exd5(ep)</dt><dd>match</dd>
<dt>exd2(ep)</dt><dd>match</dd>
<dt>a1=Q</dt><dd>match</dd>
<dt>d1=Q</dt><dd>match</dd>
<dt>f8=Q</dt><dd>match</dd>
<dt>e8=Q</dt><dd>match</dd>
<dt>a1=N</dt><dd>match</dd>
<dt>b8=B</dt><dd>match</dd>
<dt>f1=R</dt><dd>match</dd>
<dt>d8=Q</dt><dd>match</dd>
<dt>bxc1=Q</dt><dd>match</dd>
<dt>exd1=Q</dt><dd>match</dd>
<dt>Raxc1</dt><dd>match</dd>
<dt>Rfxd2</dt><dd>match</dd>
<dt>R2xc1</dt><dd>match</dd>
<dt>R5xd2</dt><dd>match</dd>
<dt>Bxc6+</dt><dd>match</dd>
<dt>Rxh8+</dt><dd>match</dd>
<dt>Rh8+</dt><dd>match</dd>
<dt>Bxb2+</dt><dd>match</dd>
<dt>Rxc3++</dt><dd>match</dd>
<dt>Bxc6++</dt><dd>match</dd>
<dt>d8=Q++</dt><dd>match</dd>
<dt>2</dt><dd>no match</dd>
<dt>b</dt><dd>no match</dd>
<dt>i2</dt><dd>no match</dd>
<dt>a9</dt><dd>no match</dd>
<dt>5d</dt><dd>no match</dd>
<dt>K2</dt><dd>no match</dd>
<dt>Ki6</dt><dd>no match</dd>
<dt>Kf9</dt><dd>no match</dd>
<dt>Qp3</dt><dd>no match</dd>
<dt>Qd9</dt><dd>no match</dd>
<dt>Q3</dt><dd>no match</dd>
<dt>N</dt><dd>no match</dd>
<dt>Nz9</dt><dd>no match</dd>
<dt>Na10</dt><dd>no match</dd>
<dt>B2</dt><dd>no match (watch case)</dd>
<dt>Bb</dt><dd>no match</dd>
<dt>Bi4</dt><dd>no match</dd>
<dt>Ri5</dt><dd>no match</dd>
<dt>Ra9</dt><dd>no match</dd>
<dt>Sa2</dt><dd>no match</dd>
<dt>Zf3</dt><dd>no match</dd>
<dt>Jj2</dt><dd>no match</dd>
<dt>1-1</dt><dd>no match</dd>
<dt>0</dt><dd>no match</dd>
<dt>2-1</dt><dd>no match</dd>
<dt>0-1</dt><dd>no match</dd>
<dt>0-0-1</dt><dd>no match</dd>
<dt>0-0-0-0</dt><dd>no match</dd>
<dt>0--0</dt><dd>no match</dd>
<dt>bxa9</dt><dd>no match</dd>
<dt>hxi2</dt><dd>no match</dd>
<dt>Kxf9</dt><dd>no match</dd>
<dt>Qxp3</dt><dd>no match</dd>
<dt>Nxz9</dt><dd>no match</dd>
<dt>Bxi4</dt><dd>no match</dd>
<dt>Rxi5</dt><dd>no match</dd>
<dt>a1=</dt><dd>no match</dd>
<dt>a2=Q</dt><dd>no match</dd>
<dt>b4=N</dt><dd>no match</dd>
<dt>d1=S</dt><dd>no match</dd>
<dt>d5=G</dt><dd>no match</dd>
<dt>exd5=G</dt><dd>no match</dd>
<dt>exd1=S</dt><dd>no match</dd>
<dt>bxa1=</dt><dd>no match</dd>
<dt>Rdxd2</dt><dd>no match</dd>
<dt>Rexe2</dt><dd>no match</dd>
<dt>R2xe2</dt><dd>no match</dd>
<dt>Bxi4++</dt><dd>no match</dd>";
RegexOptions options = RegexOptions.Multiline;
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