Maison >Java >javaDidacticiel >Regex peut-il faire correspondre les supports imbriqués sans récursion ni groupes d'équilibrage ?
Faire correspondre les supports imbriqués sans récursion ni équilibrer les groupes
Le défi :
Les expressions regex, telles que ceux du java.util.regex de Java correspondent-ils à des parenthèses arbitrairement imbriquées sans compter sur la récursivité ou les groupes d'équilibrage ?
La solution :
Oui, c'est possible en utilisant des références avancées :
(?=\()(?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)
Comment ça marche :
Cette expression se compose de plusieurs anticipations et références prospectives qui fonctionnent ensemble pour identifier des groupes de parenthèses imbriqués :
Exemple :
La chaîne suivante correspondra à trois groupes imbriqués :
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
Correspondance des groupes internes :
Pour faire correspondre les groupes internes, un groupe de capture peut être ajouté jusqu'à la fin de l'expression :
(?=\()(?=((?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)))
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!