import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<!(?:\\w+ *[=|] *|\\{\\{\\w+ *\\| *)[\\w ]*)(?:(\\d+(?:er)?|\\d+\\{\\{er\\}\\}|\\{\\{\\d+er\\}\\}) *)?(janvier|f[ée]vrier|mars|avril|mai|juin|juillet|a[ôo][ûu]t|septembre|octobre|novembre|d[ée]cembre) *(\\d{3,4})";
final String string = " 1er mars 2020\n"
+ " {{1er}} mars 2020\n"
+ " 1{{er}} mars 2020\n"
+ " 1 mars 2020\n"
+ " 20 mars 2020\n\n\n"
+ "I don't want these ones:\n"
+ "date= 20 Mars 2025\n"
+ "date=20 Mars 2025\n"
+ "{{date|20 aout 2020}}\n"
+ "{{date| 20 aout 2020}}\n\n"
+ "{{date|20 aout 2020}} 1{{er}} mars 2020 {{date|20 aout 2020}} 1{{er}} mars 2020 1{{er}} mars 2020 1 mars 2020 20 mars 2020 date=20 Mars 2025\n"
+ " \n\n"
+ "12 octobre 2012\n"
+ "foo=12 octobre 2012\n"
+ "foo = 12 octobre 2012\n"
+ "bar|12 octobre 2012\n"
+ "bar | 12 octobre 2012";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
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