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 :

Contenu contenant les délimiteurs [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Points : 74
    Points
    74
    Par défaut Contenu contenant les délimiteurs
    Bonsoir à tous

    Je viens de remarquer une chose sur mon site que je n'avais pas prévu, et je me trouve bien embêter car je suis pas vraiment doué quand l'utilisation des regex doit être un peu plus poussée.

    Mon but est de capturer dans un tableau une liste de quelques nom d'auteurs entre crochets.
    Avec preg_match_all je récupère donc les auteurs.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // $auteur = '[Auteur 1] [auteur 2] [auteur 3]';
    preg_match_all('#\[([^[]+)]#i',$auteur,$row);
    // dans mon $row jai donc 'Auteur 1', 'Auteur 2' et 'Auteur 3'
    cependant, je n'avais jamais fait attention que les auteurs collaborateurs était comme ceci : 'Auteur 1 [Auteur2]'
    Du coup si j'ai mon $auteur = "[Auteur 1 [Auteur2]] [Auteur 3]" ça va plus...

    je ne peux malheureusement pas agir sur les délimiteurs, je ne peux que récupérer le contenu. Un crochet ouvert est forcément fermé, donc y a t'il moyen de se débrouiller pour que preg_match_all n'interprète pas les crochets intérieurs comme des délimiteurs?


    merci pour votre précieuse aide

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Essaie quelque chose comme ça :
    '#(?<=\[)(.+)(?=[\]\[])#Ui'

    Avec le modificateur U, les plus petites chaînes correspondant au pattern sont renvoyées. Et avec ma modification, un nom d'auteur commence par [ et se termine par ] ou [...

    Edit : ajout d'assertions, sans ça ne prenait pas en compte le premier auteur secondaire...

  3. #3
    Membre régulier
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Points : 74
    Points
    74
    Par défaut
    Bonjour et merci pour votre réponse.
    J'ai lu à quoi servait l'assertion U, jai un peu de mal à assimiler encore

    Sinon voilà le résultat avec votre arrangement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    $auteur = "[auteur 1] [auteur 2[robert]] [auteur3]";
    preg_match_all('#(?<=\[)(.+)(?=[\]\[])#Ui',$auteur,$row);
     
    print_r($row);
    // Array ( [0] => Array ( [0] => auteur 1 [1] => auteur 2 [2] => robert [3] => auteur3 ) [1] => Array ( [0] => auteur 1 [1] => auteur 2 [2] => robert [3] => auteur3 ) ) 
    ?>
    "auteur 2[robert]" a été dissocié
    J'ai testé quelques changements dans votre exemple mais ça na rien donné, j'avance à l'aveugle, même si je sais comment ça fonctionne, en fabriquer moi même j'ai plus que du mal

    je vais continuer de tester après manger,si vous avez une idée entre temps

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par ddelec24 Voir le message
    "auteur 2[robert]" a été dissocié
    Oui, je pensais que c'était le résultat escompté... Que faudrait-il récupérer dans un cas comme celui là ?

  5. #5
    Membre régulier
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Points : 74
    Points
    74
    Par défaut
    Oui désolé je n'ai peut être pas été assez précis à ce niveau là.

    En faite, il faut que je garde ce qui est en crochets principaux comme ceci:

    [auteur 1] [auteur 2[robert]] [auteur 3]

    >> auteur 1
    >> auteur 2[robert]
    >> auteur 3

    voilà les 3 valeurs que je dois récupérer

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    S'il ne peut y avoir de collaborateurs aux collaborateurs (de la forme [auteur 1[Auteur 2[Auteur 3]]]) et si les collaborateurs ne sont pas séparés par des caractères (pas même espace entre ] et [) , alors la regex suivante devrait fonctionner :

    '#\[([^\[]+(?:\[.*\])*)\]#Ui'

  7. #7
    Membre régulier
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Points : 74
    Points
    74
    Par défaut
    cette fois-ci c'est résolu en place depuis hier et plus ce soucis
    mais là il va falloir que jexplose la regex pour la comprendre

    merci beaucoup

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

Discussions similaires

  1. [VBA-E] Creer une collection contenant les workbook ouverts
    Par jarod_bx dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2006, 23h46
  2. Réponses: 5
    Dernier message: 23/03/2006, 13h09
  3. Réponses: 5
    Dernier message: 09/11/2005, 18h52
  4. IBQuery : propriété contenant les données du 1er champ
    Par Harry dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/09/2005, 23h58
  5. [Debutant]Edition du contenu entre les balises
    Par Perceval dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 01/06/2005, 10h16

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