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

Langage PHP Discussion :

Groupes de captures devenus fous ?!! [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut Groupes de captures devenus fous ?!!
    Hello

    j'essaie d'écrire un parser qui dans un fichier texte doit traiter tout les éléments entre {: et :} d'une façon particulière.

    J'essaie donc dans mon texte de récupérer tout ce qui précèdre {: et ce qui est compris entre {: et :}

    123 {:exemple:} 456 => j'aimerais en retirer au final 123 + exemple + 456.

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		$reg = '%(([^\{]|([^\{][^\:])|(\{$))*)((\{\:([^\:]|([^\:][^\}])|(\:$))*\:\})?)%';
    		//print($reg);
     
    		preg_match_all($reg, $template, &$matches);
     
    		print ('<pre>');
    		foreach ($matches AS $match) {
    			print_r($match);
    			print ("\n");
    		}
    		print ('</pre>');
    Ce qui avec comme texte (variable $template)

    1 2 3 {:resx:test:test:} 4 5 6 1
    m'affiche

    Array
    (
    [0] => 1 2 3 {:resx:test:test:}
    [1] => 4 5 6 1
    [2] =>
    )

    Array
    (
    [0] => 1 2 3
    [1] => 4 5 6 1
    [2] =>
    )

    Array
    (
    [0] =>
    [1] => 1
    [2] =>
    )

    Array
    (
    [0] =>
    [1] =>
    [2] =>
    )

    Array
    (
    [0] =>
    [1] =>
    [2] =>
    )

    Array
    (
    [0] => {:resx:test:test:}
    [1] =>
    [2] =>
    )

    Array
    (
    [0] => {:resx:test:test:}
    [1] =>
    [2] =>
    )

    Array
    (
    [0] => t
    [1] =>
    [2] =>
    )

    Array
    (
    [0] => t:
    [1] =>
    [2] =>
    )

    Array
    (
    [0] =>
    [1] =>
    [2] =>
    )


    Comment est-il donc possible que dans un array de match, j'ai des éléments d'index supérieur à 0 (groupes capturés) qui ne fassent même pas partie de l'élément 0 (match total) ?

    Pouvez-vous m'aider ?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Ça fait longtemps que j'avais plus chipoté avec les regex php ^^

    Le comportement que j'attendais (le même que celui obtenu en .Net) requiert l'emploie du flag PREG_SET_ORDER avec preg_match_all(...)

    Résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegExp] Plus de 10 groupes de capture
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 28/08/2013, 17h03
  2. Groupe de capture
    Par tdelacou dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/08/2012, 14h40
  3. Groupe de capture pour expression reguliere
    Par cinou01 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/02/2010, 14h17
  4. Expressions régulières et groupes capturants
    Par ®om dans le forum Langage
    Réponses: 1
    Dernier message: 09/01/2008, 15h37
  5. [regexp] comment capturer un groupe
    Par PhiLou421 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 21/06/2007, 01h01

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