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 :

Expression régulière : "n'importe quel caractère"


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut Expression régulière : "n'importe quel caractère"
    Bonjour,

    Je suis en train de définir une expression régulière pour supprimer un élément xml dans une chaîne.

    Pour l'instant, j'ai ça :

    preg_replace("/<MonChampXML\>[0-9A-Za-z]+\<\/MonChampXML>/","", $str_input);

    Le problème, c'est que dans ce champ XML, j'ai des sous champs également (donc des caractères de type "<", ">", et je peux également avoir n'importe quel caractère, des ":", des "!", des "?" etc).

    Vous savez si, au lieu de "[0-9A-Za-z]+", je peux mettre une expression régulière laissant passer n'importe quel caractère ? J'ai essayé "*" sans résultat.

    PS : je ne veux pas faire de simple_xml_load_string($str_input) !

    Merci d'avance pour vos éventuelles réponses !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Thordax Voir le message
    PS : je ne veux pas faire de simple_xml_load_string($str_input) !
    Et pourquoi ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    En fait, le problème est que le simplexml_load_string fait pas très bien son boulot dès que les en-têtes xml comportent des ":"

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $requ_input = <<<XML
    <st:microelectronics>
    <test>abcd</test>
    </st:microelectronics>
    XML;
     
    $xml_input = simplexml_load_string($requ_input);
     
    $str_output = $xml_input->asXML();
    le résultat va me donner la string suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <microelectronics>
    <test>abcd</test>
    </microelectronics>
    Donc il va supprimer la chaîne "st" présente avant le caractère ":" de l'entête XML.

    Or je ne veux pas perdre d'information lors de ce passage !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Pas si ton XML (et donc ton namespace) est bien défini :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $requ_input = <<<XML
    <root xmlns:st="...">
    <st:microelectronics>
    <test>abcd</test>
    </st:microelectronics>
    </root>
    XML;
     
    $xml_input = simplexml_load_string($requ_input);
     
    echo $xml_input->asXML();
    ?>

    m'affiche :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <root xmlns:st="...">
    <st:microelectronics>
    <test>abcd</test>
    </st:microelectronics>
    </root>

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    Pas si ton XML (et donc ton namespace) est bien défini :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $requ_input = <<<XML
    <root xmlns:st="...">
    <st:microelectronics>
    <test>abcd</test>
    </st:microelectronics>
    </root>
    XML;
     
    $xml_input = simplexml_load_string($requ_input);
     
    echo $xml_input->asXML();
    ?>

    m'affiche :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <root xmlns:st="...">
    <st:microelectronics>
    <test>abcd</test>
    </st:microelectronics>
    </root>
    Oui, mais ça veut dire faire une manipulation en amont de cette chaîne, car en l'occurence, le st n'est pas défini (la chaîne xml n'est pas de mon ressort malheureusement). Je veux juste faire un update de cette chaîne, et pas la retoucher en y rajoutant des namespaces quitte à les enlever ensuite, je trouve ma solution plus simple dans ce cas !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Thordax Voir le message
    Oui, mais ça veut dire faire une manipulation en amont de cette chaîne, car en l'occurence, le st n'est pas défini (la chaîne xml n'est pas de mon ressort malheureusement). Je veux juste faire un update de cette chaîne, et pas la retoucher en y rajoutant des namespaces quitte à les enlever ensuite, je trouve ma solution plus simple dans ce cas !
    Va pour la regexp alors, mais c'est un peu crade pour du XML ou du DOM en général.

    Essaie de remplacer ta classe de caractères (entre les tags) par du .*?, et rajoute l'option s :
    /<MonChampXML\>.*?<\/MonChampXML>/s

    Pour les explications, jette un coup d'oeil à la doc de PCRE :
    http://fr.php.net/manual/fr/book.pcre.php

    (ou cherche un tutorial sur les expressions régulières)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup pour votre réactivité et pour cette réponse ! Ça fonctionne parfaitement, je marque le sujet comme résolu.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2014, 12h16
  2. Insertion avec n'importe quel caractère
    Par panthere noire dans le forum Requêtes
    Réponses: 7
    Dernier message: 26/02/2012, 09h58
  3. Réponses: 2
    Dernier message: 29/04/2011, 13h53
  4. Expression Régulière avec Quote
    Par jon301 dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2006, 23h08

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