import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?<Monthswith31>31(?<s1>\\/|\\.|-)(0?[13578]|1[02]|(Jan|Mar|May|Jul|Aug|Oct|Dec))\\g<s1>(?<Year>19[0-9][0-9]|200[0-7]))$|^(?<Monthswith29or30>(29|30)(?<s2>\\/|\\.|-)(0?[1,3-9]|1[0-2]|(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\\g<s2>(?<Year2>19[0-9][0-9]|200[0-7]))$|^(?<Allmonthswith28>(0?[1-9]|1[0-9]|2[0-8])(?<s3>\\/|\\.|-)(0?[1-9]|1[0-2]|(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\\g<s3>(?<Year3>19[0-9][0-9]|200[0-7]))$|^(?<FebLeapYears>29(?<s4>\\/|\\.|-)(0?2|Feb)\\g<s4>(19([02468][048]|[13579][26])|200[04]))$";
final String string = "02/Apr/2006\n"
+ "23/10/1996\n"
+ "13/10/2000\n\n\n\n\n\n\n\n\n\n"
+ "Right Ones\n\n\n\n"
+ "28/05/2000\n"
+ "01/01/2000\n\n\n"
+ "1/1/2000\n"
+ "01/Jan/2000\n"
+ "31/01/\n"
+ "31/Jan/2000\n"
+ "31.Jan.2000\n"
+ "31-Jan-2012\n"
+ "30/Mar/2000\n"
+ "29/Apr/2000\n"
+ "29/10/2000\n"
+ "29/02/2000\n"
+ "20/Apr/1983\n"
+ "28/02/2000\n"
+ "01/1/2000\n"
+ "01/Jan/2000\n"
+ "01/1/01\n"
+ "01/Jan/01\n"
+ "29/02/2000\n"
+ "29/Feb/2000\n"
+ "01/01/2020 #1st Jan\n"
+ "07/03/2020 #3 July\n"
+ "12/2/2020 #2 December \n"
+ "23/4/2020 #23 April \n\n"
+ "Wrong Ones\n"
+ "31/04/2000\n"
+ "29/Feb/2001\n"
+ "13/13/2000\n"
+ "30/Feb/2000\n"
+ "25/February/2000\n"
+ "32/01/2000\n"
+ "32/Jan/2000\n";
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