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 :

Aide regex extraction parenthèse et pipe


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster Freelance
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster Freelance

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Aide regex extraction parenthèse et pipe
    Bonjour, je voudrais savoir si il été possible de créer une regex avec preg_match_all() me permettant d'extraire le contenu entre chaque parenthèse, puis faire un explode de ce contenu avec le pipe |, tout en conservant les caractères avant/entre/après ces parenthèses en gardant les espaces si ils existes, le nombre de parenthèses peut varier.

    Je vous met une phrase d'exemple avec le résultat du tableau que je souhaiterais obtenir via preg_match_all()

    voila un (oiseau|koala) qui (chante|mange) beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    array(
    	array(
    		'oiseau',
    		'koala'
    	),
    	array(
    		'chante',
    		'mange'
    	),
    	'voila un',
    	' qui ',
    	' beaucoup !'
    )

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca ne serait pas plus simple de traiter ce code PHP comme un tableau PHP plutôt que comme du texte à lire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça doit être faisable avec preg_match_all mais moi j'utiliserai plutôt preg_split pour sectionner le texte à chaque parenthèse en supposant qu'il n'y a pas de parenthèses collées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $str = 'voila un (oiseau|koala) qui (chante|mange) beaucoup !';
     
    $parts = preg_split('~[()]~', $str, -1, PREG_SPLIT_NO_EMPTY);
     
    $mod = ( $str[0] == '(' ) ? 0 : 1; # on teste si les indexes des parenthèses sont pair ou impair
     
    $result = [];
    $tmp = [];
     
    foreach ($parts as $k => $v) {
        if ($k % 2 == $mod) { # si l'item provient d'une parenthèse
             $result[] = explode('|', $v);
             unset($parts[$k]);
        } else {
            $tmp[] = $v;
        }
    }
     
    $result = array_merge($result, $tmp);
     
    print_r($result);
    NB: si tu as des parenthèses imbriquées, alors tu dois le préciser et montrer la structure du tableau avec un exemple, car dans ce cas c'est une autre paire de manches.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Quoi qu'avec preg_match_all c'est pas plus difficile, ce serait même plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $str = 'voila un (oiseau|koala) qui (chante|mange) beaucoup !';
     
    if (preg_match_all('~[^(]+|\(([^)]*)\)~', $str, $matches, PREG_SET_ORDER)) {
        $result = [];
        $tmp = [];
        foreach ($matches as $m) {
            if (isset($m[1])) # si le groupe de capture 1 existe
                $result[] = explode('|', $m[1]);
            else
                $tmp[] = $m[0];
        }
     
        $result = array_merge($result, $tmp);
     
        print_r($result);
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. [RegEx] aide pour extraction de données
    Par Hotfirenet dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2008, 20h19
  2. Appliquer regex avec parenthèse capturantes sur SELECT
    Par vallica dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/02/2008, 12h34
  3. [RegEx] Besoin d'aide pour extractions
    Par PoT_de_NuTeLLa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2007, 12h51
  4. [RegEx] Pb Regex extraction URL
    Par fly06 dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2006, 21h58
  5. [regex]extraction de lignes
    Par afrikha dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 15/09/2006, 12h46

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