daty w pliku tekstowym

0

Zadanie polega na "wyłuskaniu" z pliku tekstowego wszystkich dat i ich wypisanie na konsoli (daty są w formacie yyyy-mm-dd).
Ze sprawdzeniem poprawności daty sobie poradziłem (odpowiednia liczba dni, lata przestępne itp.), natomiast problem dotyczy samego wybrania dat z pliku. Próbowałem używać wyrażeń regularnych, ale natrafiłem na problemy następujące:
Jeżeli przykładowy plik zawiera dane w postaci: 20999-11-11aaa2007-01-12, 2009-03-111aa 2012-12-12, to użycie

String regex = "([0-9][0-9][0-9][0-9])\\-+([0-1][0-9])\\-+([0-3][0-9])"

wypisze także nieprawidłowo 0999-11-11 i 2009-03-11
Próbowałem zmienić wyrażenie regularne na

String regex = "([^0-9][0-9][0-9][0-9][0-9])\\-+([0-1][0-9])\\-+([0-3][0-9])"

albo String regex = "([0-9][0-9][0-9][0-9])\-+([0-1][0-9])\-+([0-3][0-9][^0-9])"

, ale zawsze czegoś jest za dużo...
Macie jakieś sugestie jak zrobić to najprościej?
0

Możesz spróbować coś takiego, na szybko skleciłem:

.*?(?<year>(?:19|20)[0-9][0-9])-(?<month>0[1-9]|1[012])-(?<day>0[1-9]|[12][0-9]|3[01]).*?
0

dzięki za podpowiedź, ale ostatecznie zrobiłem inaczej :)
po wczytaniu danych z pliku najpierw zastąpiłem 'iksami' wszystkie ciągi znaków pasujące do dwóch wyrażeń regularnych:

String regex1 = "([0-9]+[0-9]{4})-([0-9]{2})-([0-9]{2})";
String regex2 = "([0-9]{4})-([0-9]{2})-([0-9]{2}[0-9]+)";

a potem już dopasowanie do wzorca daty (czyli yyyy-mm-dd) było proste...

1 użytkowników online, w tym zalogowanych: 0, gości: 1