Récupérer les correspondances Regex sous forme de tableau
En Java, déterminer si un modèle donné correspond à une chaîne spécifique est simple. Cependant, lors de la gestion de plusieurs correspondances, il peut être difficile de les rassembler dans un tableau. Pour résoudre ce problème, plongez dans ce guide pour découvrir comment utiliser efficacement les correspondances regex.
Approche itérative
Pour accumuler des correspondances dans un tableau, exploitez une combinaison de Matcher et String :
import java.util.regex.Matcher; import java.util.regex.Pattern; ... List<String> allMatches = new ArrayList<>(); Matcher m = Pattern.compile("your regular expression here") .matcher(yourStringHere); while (m.find()) { allMatches.add(m.group()); }
Ce code établit un objet Matcher qui trouve systématiquement les sous-chaînes correspondantes dans la chaîne d'entrée. Chaque correspondance réussie est ajoutée à la liste allMatches. Enfin, convertissez-le en tableau à l'aide de allMatches.toArray(new String[0]):
String[] matchesArr = allMatches.toArray(new String[0]);
Itérable personnalisé pour les correspondances plus lentes
Vous pouvez également envisager d'implémenter un itérateur paresseux pour parcourir et consommer immédiatement les correspondances sans traitement inutile :
public static Iterable<MatchResult> allMatches( final Pattern p, final CharSequence input) { return new Iterable<MatchResult>() { public Iterator<MatchResult> iterator() { return new Iterator<MatchResult>() { // Internal Matcher final Matcher matcher = p.matcher(input); // Lazy-filled MatchResult MatchResult pending; public boolean hasNext() { if (pending == null && matcher.find()) { pending = matcher.toMatchResult(); } return pending != null; } public MatchResult next() { if (!hasNext()) { throw new NoSuchElementException(); } MatchResult next = pending; pending = null; return next; } public void remove() { throw new UnsupportedOperationException(); } }; } }; }
Utilisez-le comme suit :
for (MatchResult match : allMatches( Pattern.compile("[abc]"), "abracadabra")) { System.out.println(match.group() + " at " + match.start()); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!