フォーマットの非常に単純な正規表現であるため、非常に奇妙dd/mm
です。結果は次のようになるはずです"Group 1: 14; Group 2: 12"
が、そうです"Group 1: 14; Group 2: 1"
。
2 番目のグループは最初の文字のみをキャプチャし、2 番目の文字 (例では「2」) を省略しました。
String sDay = "(?:0?[1-9]|[12][0-9]|3[01])";
String sMonth = "(?:0?[1-9]|1[0-2])";
String sDot = "[\\.]";
String sSlash = "[/]";
String sMinus = "[\\-]";
String sSeparators = (sDot + "|" + sSlash + "|" + sMinus);
Pattern reDayMonth =
Pattern.compile("(" + sDay + ")" + "(?:" + sSeparators + ")" + "(" + sMonth+ ")");
String s = "14/12";
Matcher reMatcher = reDayMonth.matcher(s);
boolean found = reMatcher.find();
System.out.println("Group 1: " + reMatcher.group(1) + "; Group 2: " + reMatcher.group(2));
理由がわかりません。手伝っていただけませんか?