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

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

DDD
DDDoriginal
2024-11-05 16:43:02688parcourir

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

Groupes nommés réguliers en Java

Introduction au contexte

Le package java.regex de Java ne prend pas en charge les groupes nommés, cet article présentera donc des groupes tiers bibliothèques pour résoudre ce problème.

Bibliothèques tierces prenant en charge les groupes nommés

Java 7

À partir de Java 7, Java prend en charge nativement les groupes nommés. Vous pouvez utiliser la structure suivante :

  • (?capturing text) : définit un groupe nommé nommé "name"
  • k : fait référence à un groupe nommé Groupe nommé de " name "
  • ${name} : référence le groupe capturé dans la chaîne de remplacement de Matcher
  • Matcher.group(String name) : renvoyé par le "groupe nommé" donné Capturé sous-séquence d’entrée.
    Veuillez vous référer au blog Oracle pour plus de détails.

Alternatives pré-Java 7

Pour les versions antérieures à Java 7, les bibliothèques tierces suivantes fournissent une prise en charge des groupes nommés :

  • Google nommée-regex : Bénéficie d'un support complet, mais il peut y avoir quelques bugs à résoudre.
  • jregex : Prise en charge limitée, uniquement pour les identifiants ASCII.

Exemple de groupe nommé

Ce qui suit est un exemple d'utilisation de groupes nommés :

Chaîne :

"TEST 123"

Expression régulière :

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

Accès :

matcher.group(1) == "TEST"
matcher.group("login") == "TEST"
matcher.name(1) == "login"

Remplacement :

matcher.replaceAll("aaaaa__sssss_____") == "aaaaa_TEST_sssss_123____"
matcher.replaceAll("aaaaa_${login}_sssss_${id}____") == "aaaaa_TEST_sssss_123____"

Limitations et notes

  • Java 7 a toujours une prise en charge limitée pour les groupes nommés (voir la réponse de tchrist pour plus de détails).
  • Les groupes nommés de certaines bibliothèques peuvent ne pas fonctionner avec la récursivité des expressions régulières.
  • Lors de la spécification de groupes nommés pour les expressions régulières, les conventions de dénomination doivent être strictement respectées (par exemple, les identifiants ASCII uniquement).

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