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!");
}
}
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?