Java regex première correspondance seulement


Comment dire à l'expression régulière suivante de ne trouver que la PREMIÈRE correspondance? Le code suivant continue de trouver toutes les expressions régulières possibles dans la chaîne.

C'est-à-dire que je cherche uniquement les indices de la sous-chaîne (200-800;50]

public static void main(String[] args) {

    String regex = "(\\[|\\().+(\\]|\\))";

    String testName=  "DCGRD_(200-800;50]MHZ_(PRE|PST)_(TESTMODE|REG_3FD)";

            Pattern pattern = 
            Pattern.compile(regex);

            Matcher matcher = 
            pattern.matcher(testName);

            boolean found = false;

            while (matcher.find()) {
                System.out.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());
                found = true;

            }

            if (!found){
                System.out.println("Sorry, no match!");
            }
}
Author: nhahtdh, 2013-09-17

1 answers

matcher.group(1) retournera le premier match.

Si vous voulez dire correspondance paresseuse au lieu de correspondance désireuse, essayez d'ajouter un ? après le + dans l'expression régulière.

Alternativement, vous pouvez envisager d'utiliser quelque chose de plus spécifique que .+ pour faire correspondre le contenu entre les crochets. Si vous n'attendez que des lettres, des chiffres et quelques caractères, alors peut-être que quelque chose comme [-A-Z0-9;_.]+ fonctionnerait mieux?

 10
Author: ATG, 2013-09-16 23:31:59