import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?=^(?:(\\d\\d(?:[02468][048]|[13579][26]))-02-29|\\d{4}-(?:0[13578]|1[02])-31|\\d{4}-(?:0[13-9]|1[0-2])-30|\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1\\d|2[0-8])))(\\d{4})-(\\d\\d?)-(\\d\\d?)(?:\\x20(\\d{2}):(\\d{2})(?::(\\d{2})(.\\d+)?)?)?$";
final String string = "This captures the year, month and day of a date at the 2nd, 3rd and 4th groups.\n"
+ "Also captures leap years in day 29 of February in 1st capturing group.\n"
+ "2014-05-31\n"
+ "2016-02-29\n"
+ "2004-08-10 13:02\n"
+ "2002-02-08 19:35:00\n"
+ "1999-12-31 23:59:59.999\n"
+ "1996-02-29 23:59:59.9999\n"
+ "Regex used: ^(?=^(?:(\\d\\d(?:[02468][048]|[13579][26]))-02-29|\\d{4}-(?:0[13578]|1[02])-31|\\d{4}-(?:0[13-9]|1[0-2])-30|\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1\\d|2[0-8]))$)(\\d{4})-(\\d\\d?)-(\\d\\d?)$";
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