IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Regex : probleme avec parenthese capturante et reference arriere


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut Regex : probleme avec parenthese capturante et reference arriere
    Bonjour,


    j'ai une Regex assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex r = new Regex(@"(<!--\s+(?<balise>\w+)\s+-->)(?<texte>.+?)\1", RegexOptions.Singleline);
    quand je l'applique a ce texte :
    <!-- titreFR --><strong>ASSIETTE / COUPE*RONDE EN PORCELAINE</strong><!-- titreFR -->
    je récupère ceci (tout est normal) :
    Groups[0] = <!-- titreFR --><strong>ASSIETTE / COUPE*RONDE EN PORCELAINE</strong><!-- titreFR -->
    Groups[1] = <!-- titreFR -->
    Groups["balise"] = titreFR
    Groups["texte"] = <strong>ASSIETTE / COUPE*RONDE EN PORCELAINE</strong>

    par contre si je modifie la Regex pour ne pas renvoyer la 1ere parenthese capturante (qui ne m'interesse pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex r = new Regex(@"(?:<!--\s+(?<balise>\w+)\s+-->)(?<texte>.+?)\1", RegexOptions.Singleline);

    je récupère ceci (la c'est pas ce que j'attends) :
    Groups[0] = <!-- titreFR --><strong>ASSIETTE / COUPE*RONDE EN PORCELAINE</strong><!-- titreFR
    Groups["balise"] = titreFR
    Groups["texte"] = <strong>ASSIETTE / COUPE*RONDE EN PORCELAINE</strong><!--
    il y a un bout de "<!-- " qui s'incruste dans le texte renvoyé sans que je comprenne le pourquoi de sa présence.


    quelqu'un pourrait m'expliquer ?
    merci
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Dans le cas présent, la première capture qui ne t'intéresse pas est pourtant essentielle pour le bon fonctionnement avec la backreference.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<!--\s+(?<balise>\w+)\s+-->)(?<texte>.+?)\1
    Le 1er groupe (sous expression (<!--\s+(?<balise>\w+)\s+-->)) capture quelque chose comme <!-- texte -->.

    Si on modifie ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?:<!--\s+(?<balise>\w+)\s+-->)(?<texte>.+?)\1
    Le 1er groupe (sous expression (?<balise>\w+)) capture maintenant quelque chose comme texte.

    La backreference renvoyant la dernière capture du groupe associé, on voit clairement que l'on n'aura pas le même résultat dans les deux cas, d'où la différence de comportement

    Après tu peux éventuellement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?:<!--\s+(?<balise>\w+)\s+-->)(?<texte>.+?)<!--\s+\1\s+-->
    Mais la version avec la capture qui ne t'intéresse pas est celle à utiliser
    Pas de questions techniques par MP

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/01/2010, 12h02
  2. [RegEx] Problème avec les regex
    Par foffa dans le forum Langage
    Réponses: 4
    Dernier message: 31/08/2006, 14h24
  3. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 20h02
  4. [RegEx]Probleme avec String.split
    Par sebastieng dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 09/02/2006, 21h24
  5. Problem avec un REGEX
    Par Death83 dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo