Maison >Java >javaDidacticiel >Comment puis-je utiliser des groupes de capture nommés dans les expressions régulières Java ?

Comment puis-je utiliser des groupes de capture nommés dans les expressions régulières Java ?

DDD
DDDoriginal
2024-11-04 22:10:02581parcourir

How can I use named capturing groups in Java regular expressions?

Regroupement nommé en Java

Le package java.regex en Java ne prend pas en charge le regroupement nommé. Java 7 et supérieur

Java 7 et supérieur prend désormais en charge le regroupement nommé. Les groupes nommés peuvent être définis en utilisant :

Les groupes nommés peuvent être référencés en utilisant :

<code class="java">(?<name>capturing text)</code>

k : rétro-référencer un groupe nommé

    Matcher .group(String name) : renvoie la sous-séquence d'entrée capturée en fonction du groupe nommé donné
  • ${name} dans Matcher.replaceAll() : fait référence au matcher pour remplacer le groupe capturé dans la chaîne
  • Alternatives (pour les versions antérieures à Java 7)

Pour les versions antérieures à Java 7, les alternatives suivantes sont disponibles :

Google nommé-regex
     : une bibliothèque légère qui prend en charge le regroupement nommé.
  • jregex
  •  : une bibliothèque d'expressions régulières riche en fonctionnalités, incluant la prise en charge des groupements nommés.
  • Implémentation personnalisée

Vous pouvez également prendre en charge le regroupement nommé en écrivant votre propre version de Regex. Par exemple, la bibliothèque Regex2 fournit cette prise en charge.

Exemple

Exemple d'expression régulière utilisant un regroupement nommé :

Exemple de code Java utilisant un regroupement nommé :

(?<login>\w+) (?<id>\d+)

Exemple d'utilisation d'un groupement nommé pour remplacer du texte :

Pattern pattern = Pattern.compile("(?&lt;login&gt;\w+) (?&lt;id&gt;\d+)");
Matcher matcher = pattern.matcher("TEST 123");

if (matcher.find()) {
  String login = matcher.group("login");
  String id = matcher.group("id");
}

Exemple d'utilisation d'une référence arrière de groupement nommé :

<code class="java">String result = matcher.replaceAll("aaaaa__sssss_____");</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn