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 :

Parser une chaine (avec une regex ??)


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Parser une chaine (avec une regex ??)
    Bonjour, je bloc sur un petit soucis depuis un moment. Je n'arrive pas a parser une chaine php.
    Je pensais utiliser une regex mais je n'y arrive pas !

    J'ai un text du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin {{id=1 value='lorem ipsum bla bla bla'}}. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections.
    Et j'aurai besoin d'une fonction qui me retourne 3 variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $text_clean = One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections.
    $id = 1
    $value = lorem ipsum bla bla bla
    Est-ce que quelqu'un a une solution pour moi ? Je pense qu'avec une regex sa devrai etre assez simple mais je suis pas un expert !

    Merci pour votre aide !

  2. #2
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    Bonjour,

    Pour récupérer déjà l'id et la value voici ce que tu peux utiliser :

    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
     
     
    $string = "One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin {{id=1 value='lorem ipsum bla bla bla'}}. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections.
    ";
    preg_match("/\{\{id=([0-9]*)\svalue='(.*)'\}\}/iu", $string , $matches);
     
    var_dump($matches);
     
    /**
    le résultat du var_dump
    array(3) {
      [0]=>
      string(40) "{{id=1 value='lorem ipsum bla bla bla'}}"
      [1]=>
      string(1) "1"
      [2]=>
      string(23) "lorem ipsum bla bla bla"
    }
     
    **/
    Et une fois que tu as récupérer tes valeurs pour "clean" ta chaine tu peux reconstruire les informations et faire un str_replace pour remplacer par du vide.

    @+

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci Inazo pour ta réponse.
    Effectivement ca marche, parcontre j'ai oublié une précision dans a demande, il peux y avoir plusieurs {{ }} dans ma chaine et la ta regex ne fonctionne plus.

    Comment faire dans le cas ou mon string est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin {{id=1 value='lorem ipsum 1'}}. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, {{id=2 value='lorem ipsum 2'}}slightly domed and divided by arches into stiff sections.
    ?

    Merci bcp

  4. #4
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    tu peux essayer en changeant preg_match par preg_match_all

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non la regex ne fonctionne plus du coup
    elle me retourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [
    	(int) 0 => [
    		(int) 0 => '{{id=1 value='lipsum 1'}}fois au cours de nos lectures, nous peinons à saisir leur sens, leur(s) définition(s) possible(s), dans le propos singulier que nous lisons. Nous les sentons renouvelés sauvagement d’un énoncé à l’autre {{id=2 value='lipsum 2'}}'
    	],
    	(int) 1 => [
    		(int) 0 => '1'
    	],
    	(int) 2 => [
    		(int) 0 => 'lipsum 1'}}fois au cours de nos lectures, nous peinons à saisir leur sens, leur(s) définition(s) possible(s), dans le propos singulier que nous lisons. Nous les sentons renouvelés sauvagement d’un énoncé à l’autre {{id=2 value='lipsum 2'
    	]
    ]

  6. #6
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    Petit ajustement du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("/{{id=([0-9])*\svalue='([^}]*)'}}/iu", $string , $matches);

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ca a l'air tout bon !
    Merci infiniment pour ton aide !

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    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 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Tu peux le faire d'un coup avec preg_replace_callback:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $idValues = [];
    $text_clean = preg_replace_callback("~{{id=(\d+)\s+value='([^']*)'}}~i", function ($m) use (&$idValues) {
        $idValues[] = ['id'=>$m[1], 'value'=>$m[2]];
    }, $str);

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

Discussions similaires

  1. Isoler une chaine d'une chaine, problème de regex?
    Par PaJe1005 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/06/2012, 09h36
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Réponses: 3
    Dernier message: 18/03/2008, 14h28
  5. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24

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