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"
Copier après la connexion
Expression régulière :
"(?<login>\w+) (?<id>\d+)"
Copier après la connexion
Accès :
matcher.group(1) == "TEST"
matcher.group("login") == "TEST"
matcher.name(1) == "login"
Copier après la connexion
Remplacement :
matcher.replaceAll("aaaaa__sssss_____") == "aaaaa_TEST_sssss_123____"
matcher.replaceAll("aaaaa_${login}_sssss_${id}____") == "aaaaa_TEST_sssss_123____"
Copier après la connexion
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!