How to get regex matched group values

It works fine if you avoid calling matcher.replaceAll. When you call replaceAll it forgets any previous matches.

String time = "14:35:59.99";
String timeRegex = "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:\\.([0-9]{1,3}))?";
Pattern pattern = Pattern.compile(timeRegex);
Matcher matcher = pattern.matcher(time);
if (matcher.matches()) {
    String hours = matcher.group(1);
    String minutes = matcher.group(2);
    String seconds = matcher.group(3);
    String miliSeconds = matcher.group(4);
    System.out.println(hours + ", " + minutes  + ", " + seconds + ", " + miliSeconds);
}

Notice that I’ve also made a couple of improvements to your regular expression:

  • I’ve used non-capturing groups (?: ... ) for the groups that you aren’t interested in capturing.
  • I’ve changed . which matches any character to \\. which matches only a dot.

See it working online: ideone

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)