import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^\\s*\n"
+ "# date\n"
+ "(?<date>\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})\n"
+ "# facility.severity\n"
+ "\\s(?<facility>\\S+)\\.(?<severity>\\S+)\n"
+ "# server\n"
+ "\\s(?<server>\\S*)\n"
+ "# date\n"
+ "\\s(?<otherDate>\\d{4}-\\d{2}-\\d{2}:\\s\\d{2}:\\d{2}:\\d{2})\n"
+ "# time zone\n"
+ "\\s(?<timeZone>\\S*)\n"
+ "# ip address\n"
+ "\\s(?<ip>\\S*)\n"
+ "# legacy email address\n"
+ "\\s(?<legacyEmailAddress>\\S*)\n"
+ "# first name\n"
+ "\\s(?|\"(?<firstName>[^\"\\n]+)\"|(?<firstName>\\S*))\n"
+ "# last name\n"
+ "\\s(?|\"(?<lastName>[^\"\\n]+)\"|(?<lastName>\\S*))\n"
+ "# account number\n"
+ "\\s(?<account>\\S*)\n"
+ "# program code\n"
+ "\\s(?<programCode>\\S*)\n"
+ "# uid\n"
+ "\\s(?<uid>\\S*)\n"
+ "# email address\n"
+ "\\s(?<emailAddress>\\S*)\n"
+ "# event type\n"
+ "\\s(?<eventType>\\S*)\n"
+ "# source\n"
+ "\\s(?<source>\\S*)\n"
+ "# category\n"
+ "\\s(?<category>\\S*)\n"
+ "\\s*$";
final String string = "2016-01-29 18:19:54 local1.info server.domain.com 2016-01-29: 11:19:54 MST UNKNOWN UNKNOWN FOO \"BAR BAZ\" UNKNOWN UNKNOWN UNKNOWN EMAIL@EXAMPLE.COM PROFILE_CHANGE ProfileChangeProcessor A\n"
+ "2016-01-29 18:20:25 local4.info server.domain.com 2016-01-29: 11:20:25 MST UNKNOWN UNKNOWN \"F B\" BAZ ABC12345 GP SOME_UID EMAIL@EXAMPLE.COM EVENT_FROM_SOME_PROCESS UNKNOWN UNKNOWN\n"
+ "2016-01-29 18:23:10 local1.info server.domain.com 2016-01-29: 11:23:10 MST UNKNOWN UNKNOWN FOO BAR UNKNOWN UNKNOWN UNKNOWN EMAIL@EXAMPLE.COM SOME_CHANGE ProfileChangeProcessor AP\n"
+ "2016-01-29 18:26:24 local1.info server.domain.com 2016-01-29: 11:26:24 MST UNKNOWN EMAIL@EXAMPLE.COM FOO \"B'Baz\" UNKNOWN UNKNOWN UNKNOWN SOME_CHANGE ProfileChangeProcessor O\n"
+ "2016-01-29 18:26:55 local1.info server.domain.com 2016-01-29: 11:26:55 MST UNKNOWN EMAIL@EXAMPLE.COM \"FOO OR BAR\" BAZ SXR12646 GP UNKNOWN SOME_CHANGE ProfileChangeProcessor M";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.COMMENTS);
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