## Why is this an issue?

Why use named groups only to never use any of them later on in the code?

This rule raises issues every time named groups are:

- defined but never called anywhere in the code through their name;
- defined but called elsewhere in the code by their number instead;
- referenced while not defined.

### Noncompliant code example

    String date = "01/02";

    Pattern datePattern = Pattern.compile("(?<month>[0-9]{2})/(?<year>[0-9]{2})");
    Matcher dateMatcher = datePattern.matcher(date);

    if (dateMatcher.matches()) {
      checkValidity(dateMatcher.group(1), dateMatcher.group(2));  // Noncompliant - numbers instead of names of groups are used
      checkValidity(dateMatcher.group("day")); // Noncompliant - there is no group called "day"
    }

    // ...

    String score = "14:1";

    Pattern scorePattern = Pattern.compile("(?<player1>[0-9]+):(?<player2>[0-9]+)"); // Noncompliant - named groups are never used
    Matcher scoreMatcher = scorePattern.matcher(score);

    if (scoreMatcher.matches()) {
      checkScore(score);
    }

### Compliant solution

    String date = "01/02";

    Pattern datePattern = Pattern.compile("(?<month>[0-9]{2})/(?<year>[0-9]{2})");
    Matcher dateMatcher = datePattern.matcher(date);

    if (dateMatcher.matches()) {
      checkValidity(dateMatcher.group("month"), dateMatcher.group("year"));
    }

    // ...

    String score = "14:1";

    Pattern scorePattern = Pattern.compile("(?<player1>[0-9]+):(?<player2>[0-9]+)");
    Matcher scoreMatcher = scorePattern.matcher(score);

    if (scoreMatcher.matches()) {
      checkScore(scoreMatcher.group("player1"));
      checkScore(scoreMatcher.group("player2"));
    }

Or, using dedicated variables instead of group names:

    String score = "14:1";

    String player = "([0-9]+)";
    String gameScore = player + ":" + player;

    Pattern scorePattern = Pattern.compile(gameScore);
    Matcher scoreMatcher = scorePattern.matcher(score);

    if (scoreMatcher.matches()) {
      checkScore(score);
    }