I think you're eventually going to want to use a DateFormat or DateTimeFormatter of some sort, to handle information about how many days each month has, and which years are leap years. Given that you need to use such classes eventually, and given that they do everything you need, I don't see why there would be any use for a regular expression first. I suppose it could be a performance optimization - depending on how common is is to encounter grossly invalid dates in the dataset - but that seems very unlikely to matter much. Better to concentrate on simple code that works.
Cris, I do see that you've identified "29/02/200s" as a valid date. Is that a typo for "29/02/2005" maybe? Also, do you have to worry about any other possibilities like "29/02/05", "02/29/05", "29/2/2005", "29-02-2005", "29.02.2005", "29 Feb 2005" or other things like that? The hardest part may be getting a list of possible
patterns that you need to accept. If you try to accept too many possible patterns, it becomes impossible to determine what some dates actually are. E.g. is "05/06/07" June 5, 2007? Or May 6, 2007? Or maybe May 7, 2005? Hopefully only one of these is "obviously" right to you for the context this program is intended to operate in. Otherwise, things can get ugly.