import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(([a-hKQNB]x)?(R[1-8]?[a-f]?x)?[KQNBR]?[abcdefgh]([1-8]{1}(?!=))(\\(ep\\))?((?<=[18])=[KQNBR])?\\+\\{,2\\}|0(-0){1,2})";
final String string = " <dt>e4</dt><dd>match</dd>\n"
+ " <dt>a8</dt><dd>match</dd>\n"
+ " <dt>g5</dt><dd>match</dd>\n"
+ " <dt>h7</dt><dd>match</dd>\n"
+ " <dt>a1</dt><dd>match</dd>\n"
+ " <dt>Kd2</dt><dd>match</dd>\n"
+ " <dt>Kg6</dt><dd>match</dd>\n"
+ " <dt>Qh4</dt><dd>match</dd>\n"
+ " <dt>Qe2</dt><dd>match</dd>\n"
+ " <dt>Qb7</dt><dd>match</dd>\n"
+ " <dt>Nf2</dt><dd>match</dd>\n"
+ " <dt>Nc6</dt><dd>match</dd>\n"
+ " <dt>Be4</dt><dd>match</dd>\n"
+ " <dt>Bf3</dt><dd>match</dd>\n"
+ " <dt>Bb2</dt><dd>match</dd>\n"
+ " <dt>Ra1</dt><dd>match</dd>\n"
+ " <dt>Rc3</dt><dd>match</dd>\n"
+ " <dt>Rh8</dt><dd>match</dd>\n"
+ " <dt>0-0</dt><dd>match</dd>\n"
+ " <dt>0-0-0</dt><dd>match</dd>\n"
+ " <dt>exd5</dt><dd>match</dd>\n"
+ " <dt>axb7</dt><dd>match</dd>\n"
+ " <dt>exd2</dt><dd>match</dd>\n"
+ " <dt>Bxc6</dt><dd>match</dd>\n"
+ " <dt>Bxa4</dt><dd>match</dd>\n"
+ " <dt>Qxe2</dt><dd>match</dd>\n"
+ " <dt>Qxb7</dt><dd>match</dd>\n"
+ " <dt>Nxf2</dt><dd>match</dd>\n"
+ " <dt>Nxb2</dt><dd>match</dd>\n"
+ " <dt>Bxb2</dt><dd>match</dd>\n"
+ " <dt>Rxh8</dt><dd>match</dd>\n"
+ " <dt>Rxc3</dt><dd>match</dd>\n"
+ " <dt>exd5(ep)</dt><dd>match</dd>\n"
+ " <dt>exd2(ep)</dt><dd>match</dd>\n"
+ " <dt>a1=Q</dt><dd>match</dd>\n"
+ " <dt>d1=Q</dt><dd>match</dd>\n"
+ " <dt>f8=Q</dt><dd>match</dd>\n"
+ " <dt>e8=Q</dt><dd>match</dd>\n"
+ " <dt>a1=N</dt><dd>match</dd>\n"
+ " <dt>b8=B</dt><dd>match</dd>\n"
+ " <dt>f1=R</dt><dd>match</dd>\n"
+ " <dt>d8=Q</dt><dd>match</dd>\n"
+ " <dt>bxc1=Q</dt><dd>match</dd>\n"
+ " <dt>exd1=Q</dt><dd>match</dd>\n"
+ " <dt>Raxc1</dt><dd>match</dd>\n"
+ " <dt>Rfxd2</dt><dd>match</dd>\n"
+ " <dt>R2xc1</dt><dd>match</dd>\n"
+ " <dt>R5xd2</dt><dd>match</dd>\n"
+ " <dt>Bxc6+</dt><dd>match</dd>\n"
+ " <dt>Rxh8+</dt><dd>match</dd>\n"
+ " <dt>Rh8+</dt><dd>match</dd>\n"
+ " <dt>Bxb2+</dt><dd>match</dd>\n"
+ " <dt>Rxc3++</dt><dd>match</dd>\n"
+ " <dt>Bxc6++</dt><dd>match</dd>\n"
+ " <dt>d8=Q++</dt><dd>match</dd>\n\n"
+ " <dt>2</dt><dd>no match</dd>\n"
+ " <dt>b</dt><dd>no match</dd>\n"
+ " <dt>i2</dt><dd>no match</dd>\n"
+ " <dt>a9</dt><dd>no match</dd>\n"
+ " <dt>5d</dt><dd>no match</dd>\n"
+ " <dt>K2</dt><dd>no match</dd>\n"
+ " <dt>Ki6</dt><dd>no match</dd>\n"
+ " <dt>Kf9</dt><dd>no match</dd>\n"
+ " <dt>Qp3</dt><dd>no match</dd>\n"
+ " <dt>Qd9</dt><dd>no match</dd>\n"
+ " <dt>Q3</dt><dd>no match</dd>\n"
+ " <dt>N</dt><dd>no match</dd>\n"
+ " <dt>Nz9</dt><dd>no match</dd>\n"
+ " <dt>Na10</dt><dd>no match</dd>\n"
+ " <dt>B2</dt><dd>no match (watch case)</dd>\n"
+ " <dt>Bb</dt><dd>no match</dd>\n"
+ " <dt>Bi4</dt><dd>no match</dd>\n"
+ " <dt>Ri5</dt><dd>no match</dd>\n"
+ " <dt>Ra9</dt><dd>no match</dd>\n"
+ " <dt>Sa2</dt><dd>no match</dd>\n"
+ " <dt>Zf3</dt><dd>no match</dd>\n"
+ " <dt>Jj2</dt><dd>no match</dd>\n"
+ " <dt>1-1</dt><dd>no match</dd>\n"
+ " <dt>0</dt><dd>no match</dd>\n"
+ " <dt>2-1</dt><dd>no match</dd>\n"
+ " <dt>0-1</dt><dd>no match</dd>\n"
+ " <dt>0-0-1</dt><dd>no match</dd>\n"
+ " <dt>0-0-0-0</dt><dd>no match</dd>\n"
+ " <dt>0--0</dt><dd>no match</dd>\n"
+ " <dt>bxa9</dt><dd>no match</dd>\n"
+ " <dt>hxi2</dt><dd>no match</dd>\n"
+ " <dt>Kxf9</dt><dd>no match</dd>\n"
+ " <dt>Qxp3</dt><dd>no match</dd>\n"
+ " <dt>Nxz9</dt><dd>no match</dd>\n"
+ " <dt>Bxi4</dt><dd>no match</dd>\n"
+ " <dt>Rxi5</dt><dd>no match</dd>\n"
+ " <dt>a1=</dt><dd>no match</dd>\n"
+ " <dt>a2=Q</dt><dd>no match</dd>\n"
+ " <dt>b4=N</dt><dd>no match</dd>\n"
+ " <dt>d1=S</dt><dd>no match</dd>\n"
+ " <dt>d5=G</dt><dd>no match</dd>\n"
+ " <dt>exd5=G</dt><dd>no match</dd>\n"
+ " <dt>exd1=S</dt><dd>no match</dd>\n"
+ " <dt>bxa1=</dt><dd>no match</dd>\n"
+ " <dt>Rdxd2</dt><dd>no match</dd>\n"
+ " <dt>Rexe2</dt><dd>no match</dd>\n"
+ " <dt>R2xe2</dt><dd>no match</dd>\n"
+ " <dt>Bxi4++</dt><dd>no match</dd>";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html