Maison >Java >javaDidacticiel >Comment faire correspondre les virgules en dehors des parenthèses à l'aide d'expressions régulières en Java ?

Comment faire correspondre les virgules en dehors des parenthèses à l'aide d'expressions régulières en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-10 09:51:02249parcourir

How to Match Commas Outside Parentheses Using Regular Expressions in Java?

Faire correspondre des virgules en dehors des parenthèses à l'aide d'expressions régulières

Problème :

Considérons une chaîne contenant plusieurs virgules, telles que "12,44,foo,bar,(23,45,200),6". Le but est de créer une expression régulière en Java qui correspond à toutes les virgules sauf celles entre parenthèses, c'est-à-dire uniquement les virgules après 23 et 45 dans l'exemple donné.

Solution :

Pour y parvenir, nous devons utiliser une expression régulière qui intègre une assertion prospective négative. Voici une expression régulière Java qui satisfait à cette exigence :

Pattern regex = Pattern.compile(
    ",         # Match a comma\n" +
    "(?!       # only if it's not followed by...\n" +
    " [^(]*    #   any number of characters except opening parens\n" +
    " \)      #   followed by a closing parens\n" +
    ")         # End of lookahead", 
    Pattern.COMMENTS);

Explication :

  1. Comma Match : La première partie du regex, "virgules", correspond simplement à une virgule.
  2. Assertion d'anticipation négative : l'assertion d'anticipation négative, incluse dans la section "(?!)", vérifie si le modèle suivant ne correspond pas à la virgule.
  3. Vérification des parenthèses imbriquées : Ce modèle se compose de "1 )". La partie "1" correspond à n'importe quel nombre de caractères à l'exception d'une parenthèse ouvrante "(". La partie ")" correspond à une parenthèse fermante ")".
  4. Logique globale : L'anticipation négative garantit que la virgule ne correspond que si elle n'est suivie d'aucun caractère à l'exception des parenthèses ouvrantes, qui sont ensuite suivies d'une parenthèse fermante. Cela exclut effectivement les virgules entre parenthèses.

  1. (

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