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 :

Découper une chaine


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 49
    Points
    49
    Par défaut Découper une chaine
    Bonjour à tous,

    j'aimerais découper cette chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <image id="0">0169120000000805T01.JPG</image><image id="1">0169120000000805T02.JPG</image><image id="2">0169120000000805T03.JPG</image><image id="3">0169120000000805T04.JPG</image><image id="4">0169120000000805T05.JPG</image>
    et obtenir :
    0169120000000805T01.JPG,0169120000000805T02.JPG,0169120000000805T03.JPG,0169120000000805T04.JPG,0169120000000805T05.JPG
    Voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $search = '/<image id="[0-9]+">/';
    $chaine = preg_replace($search,',',$chaine);
     
    // résultat
    0169120000000805T01.JPG</image>,0169120000000805T02.JPG</image>,0169120000000805T03.JPG</image> ...
    mais comment enlever le </image> ?
    merci

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    preg_match_all() conviendrait mieux.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $chaine = '<image id="0">0169120000000805T01.JPG</image><image id="1">0169120000000805T02.JPG</image><image id="2">0169120000000805T03.JPG</image><image id="3">0169120000000805T04.JPG</image><image id="4">0169120000000805T05.JPG</image>';
    $pattern = '#<image id="[0-9]+">(.*)</image>#U';
    preg_match_all($pattern,$chaine,$results);
    var_dump($results[1]);

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour parser du XML c'est SimpleXML ou DOMDocument

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut
    Vois plus large. Ton pattern peut être générique. Pour supprimer n'importe quel balise utilise ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = '@<[^>]*>@i';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $str = '<image id="0">0169120000000805T01.JPG</image><image id="1">0169120000000805T02.JPG</image><image id="2">0169120000000805T03.JPG</image><image id="3">0169120000000805T04.JPG</image><image id="4">0169120000000805T05.JPG</image>' ;
    $search = '@<[^>]*>@i';
    $chaine = preg_replace( $search,',', $str);
    // le resultat 
    // ,0169120000000805T01.JPG,,0169120000000805T02.JPG,,0169120000000805T03.JPG,,0169120000000805T04.JPG,,0169120000000805T05.JPG,
    // donc un peu de nettoyage
    echo str_replace( ',,', ',', trim( $chaine,','));
    // resultat
    // 0169120000000805T01.JPG,0169120000000805T02.JPG,0169120000000805T03.JPG,0169120000000805T04.JPG,0169120000000805T05.JPG

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par kodeya Voir le message
    Vois plus large. Ton pattern peut être générique. Pour supprimer n'importe quel balise utilise ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = '@<[^>]*>@i';
    moi je refais pas la roue et j'utilise strip_tags

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<image id="[0-9]+">(.*)</image>#U';
    Pourquoi utiliser un modifier quand l'expression régulière peut gérer l'ungreedy ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<image id="[0-9]+">(.*?)</image>#';
    exemple

    Mais, j'aurais dit comme stealth quand j'ai vu les balises :
    Citation Envoyé par stealth35 Voir le message
    pour parser du XML c'est SimpleXML ou DOMDocument
    et :
    Citation Envoyé par stealth35 Voir le message
    moi je refais pas la roue et j'utilise strip_tags
    2 +1 pour toi

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut
    strip_tags c'est good

    Bien sur, il y a plusieurs solutions. Chaqu'un a ces petites habitudes.

    Utiliser les fonctions xml (simplexml ou autre ) avec html c'est pas génial. Html est souvent mal codé. Les balises ne sont pas fermées correctement. Ce qui fait planter les parseurs xml. xhtml strict c'est autre chose.

    Alors pour quoi pas un bon veux regexp sur html surtout si on travaille sur un bout du code et pas sur le document en entier ?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par kodeya Voir le message
    Bien sur, il y a plusieurs solutions. Chaqu'un a ces petites habitudes. strip_tags c'est good

    Utiliser les fonctions xml (simplexml ou autre ) avec html c'est pas génial. Html est souvent mal codé. Les balises ne sont pas fermé correctement. Ce qui fait planter les parseurs xml. xhtml strict c'est autre chose.

    Alors pour quoi pas un bon veux regexp sur html surtout si on travaille sur un bout du code et pas sur le document en entier ?
    parce que c'est pas fait pour et que même si c'est mal codé DOMDocument va quand même parser le HTML. Faut pas confondre non plus XML et HTML c'est 2 choses différentes, DOMDocument est un parseur de DOM (donc pas exclusivement XML)

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utiliser les fonctions xml (simplexml ou autre ) avec html c'est pas génial. Html est souvent mal codé. Les balises ne sont pas fermé correctement. Ce qui fait planter les parseurs xml. xhtml strict c'est autre chose.
    C'est pour ça qu'il existe Strict Error Checking: http://www.php.net/manual/en/class.d...terrorchecking

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    C'est pour ça qu'il existe Strict Error Checking: http://www.php.net/manual/en/class.d...terrorchecking
    c'est plutôt libxml_use_internal_errors

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 84
    Points
    84
    Par défaut
    même si c'est mal codé DOMDocument va quand même parser le HTML.
    Merci stealth35. je vais regarder DOMDocument . S'il parse n'importe quel html ça va me faciliter la vie. C'est bon à savoir

  12. #12
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Citation Envoyé par Shikiryu Voir le message
    Pourquoi utiliser un modifier quand l'expression régulière peut gérer l'ungreedy ?
    Parce que je suis sous PHP 5.0.5 et que je n'ai lu nulle part qu'avec les versions plus récentes c'était géré de base. Mais j'aurai appris quelque chose d'intéressant. ^^

  13. #13
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Parce que je suis sous PHP 5.0.5 et que je n'ai lu nulle part qu'avec les versions plus récentes c'était géré de base. Mais j'aurai appris quelque chose d'intéressant. ^^
    Rien à voir avec la version de PHP, je ne parle que d'expression régulière pour ceci .
    Les métacaractères des regex ont "toujours" existé non ?
    0 ou plusieurs caractères et greedy. (un max de caractère avant le prochain token)
    0 ou plusieurs caractères et ungreedy. (s'arrête dès la 1ère rencontre du prochain token

  14. #14
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Oh je n'avais pas vu la petite subtilité.
    Merci pour cette astuce !

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 14h18
  2. [VB6] Découper une chaine sans délimiteur
    Par dbozec dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/04/2006, 20h26
  3. découper une chaine
    Par R@IZER dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2005, 18h04
  4. [StringTokenizer] Découper une chaine de caractere
    Par nehan dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 11/05/2005, 00h41
  5. [Débutant][Token] découper une chaine
    Par _Eric_ dans le forum Langage
    Réponses: 14
    Dernier message: 06/07/2004, 11h36

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