import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?P<Element><(?P<TagName>[:_A-z][-.0-9:_A-z\\xB7]*)(?:[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]*=[\\x09\\x0A\\x0D\\x20]*(?:\"(?:[^<&\"]|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^<&']|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*'))*[\\x09\\x0A\\x0D\\x20]*(?:>(?:(?:[^<&\\]]|](?!]>))*(?:(?:(?P>Element)|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));|<!\\[CDATA\\[(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x5D]|](?!]>))*]]>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->)(?:[^<&\\]]|](?!]>))*)*)<\\/(?P=TagName)[\\x09\\x0A\\x0D\\x20]*|\\/)>)|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));|<!\\[CDATA\\[(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x5D]|](?!]>))*]]>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->|<!DOCTYPE[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]+(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')))?[\\x09\\x0A\\x0D\\x20]*(?:\\[(?:(?:<!ELEMENT[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:EMPTY|ANY|\\([\\x09\\x0A\\x0D\\x20]*#PCDATA(?:(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*)*[\\x09\\x0A\\x0D\\x20]*\\)\\*|[\\x09\\x0A\\x0D\\x20]*\\))|(?:(?P<choice>\\([\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?)+[\\x09\\x0A\\x0D\\x20]*\\))|(?P<seq>\\([\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?(?:[\\x09\\x0A\\x0D\\x20]*,[\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?)*[\\x09\\x0A\\x0D\\x20]*\\)))[?*+]?)[\\x09\\x0A\\x0D\\x20]*>|<!ATTLIST[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:CDATA|(?:ID(?:REFS?)?|ENTIT(?:Y|IES)|NMTOKENS?)|(?:NOTATION[\\x09\\x0A\\x0D\\x20]+\\([\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*)*[\\x09\\x0A\\x0D\\x20]*\\)|\\([\\x09\\x0A\\x0D\\x20]*(?:[-.0-9:_A-z\\xB7])+(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*(?:[-.0-9:_A-z\\xB7])+)*[\\x09\\x0A\\x0D\\x20]*\\)))[\\x09\\x0A\\x0D\\x20]+(?:#(?:REQUIRED|IMPLIED)|(?:#FIXED[\\x09\\x0A\\x0D\\x20]+)?(?:\"(?:[^<&\"]|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^<&']|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')))*[\\x09\\x0A\\x0D\\x20]*>|(?:<!ENTITY[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:\"(?:[^%&\"]|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^%&']|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')|(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*'))(?:[\\x09\\x0A\\x0D\\x20]+NDATA[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*)?)[\\x09\\x0A\\x0D\\x20]*>|<!ENTITY[\\x09\\x0A\\x0D\\x20]+%[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:\"(?:[^%&\"]|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^%&']|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')|(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')))[\\x09\\x0A\\x0D\\x20]*>)|<!NOTATION[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*'))|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*'))[\\x09\\x0A\\x0D\\x20]*>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->)|(?:%[:_A-z][-.0-9:_A-z\\xB7]*;|[\\x09\\x0A\\x0D\\x20]+))*][\\x09\\x0A\\x0D\\x20]*)?>";
final String string = "<appointments>\n"
+ " <event date=\"03-05-02\" start-time=\"09:00\" end-time=\"10:00\">\n"
+ " <type>Meeting</type>\n"
+ " <title>Staff Meeting</title>\n"
+ " <description>Weekly staff meeting</description>\n"
+ " <location>Conference Room</location>\n"
+ " <reminder status=\"no\"/>\n"
+ " </event>\n\n"
+ " <event date=\"03-06-02\" start-time=\"14:00\" end-time=\"15:00\">\n"
+ " <type>Interview</type>\n"
+ " <title>Developer Interview</title>\n"
+ " <description>Interview new developer candidate.</description>\n"
+ " <location>Office</location>\n"
+ " <reminder status=\"yes\" interval=\"15-min\" method=\"ICQ\"/>\n"
+ " </event>\n\n"
+ " <event date=\"03-15-02\" start-time=\"13:45\" end-time=\"15:00\">\n"
+ " <type>Dentist</type>\n"
+ " <title>Root Canal</title>\n"
+ " <description>Root canal on lower left molar.</description>\n"
+ " <location>Dr. Scrivello's Office</location>\n"
+ " <reminder status=\"yes\" interval=\"1-day\" method=\"e-mail\"/>\n"
+ " </event>\n"
+ "</appointments>";
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