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 :

Isoler une chaïne par le biais d'une expression régulière


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut Isoler une chaïne par le biais d'une expression régulière
    Bonjour,

    Comment faire pour isoler une chaine inconnue mais que l'on peut extraire par le biais d'un balisage commun ?

    Je m'explique, prenons l'exemple de la balise title de cette page.
    <title>Forum des professionnels en informatique - Ouvrir une nouvelle discussion</title>

    On sait que title s'ouvre ainsi <title> et se ferme par </title>.

    L'idée extraire uniquement : Forum des professionnels en informatique - Ouvrir une nouvelle discussion

    Autre exemple (plus proche de mon cas)
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <option="x">item</option><option="x">item</option>

    Isoler x jusqu'à la première </option> rencontrée.

    Merci de votre aide.

    HPL76

  2. #2
    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 HTML c'est avec DOMDocument

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Encore toi !!!

    Ca fonctionne même avec la syntaxe ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Author Val="Verlaine" />
    car je vois dans les exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <europe>
        <pays>France</pays>
        <pays>Belgique</pays>
        <pays>Espagne</pays>
      </europe>
    ?

    HPL76

  4. #4
    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 hpl76 Voir le message
    Encore toi !!!

    Ca fonctionne même avec la syntaxe ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Author Val="Verlaine" />
    car je vois dans les exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <europe>
        <pays>France</pays>
        <pays>Belgique</pays>
        <pays>Espagne</pays>
      </europe>

    ?

    HPL76
    ouai ca marchera, mais la si c'est du XML, donc tu peux aussi utiliser SimpleXML

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    J'ai utilisé simpleXML, qui me donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xmlstr = '...<auteur val="RIMBAUD" />...';
     
    $xml = new SimpleXMLElement($xmlstr);
     
    print_r($xml);//renvoie [auteur] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => RIMBAUD)
    J'ai essayé ceci :
    mais ca ne renvoie rien

    Où est-ce que je faute ?

    HPL76

  6. #6
    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
    je t'ai répondu sur l'autre, evite de faire de cross posting c'est pas très agréable pour ceux qui répondent

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Désolé stealth35, je ne savais pas que tu étais sur les 2 forums. En même temps, j'ai 2 choses à l'esprit : 1 - je suis pris par le temps (chose que tu dois connaitre/comprendre je pense), 2 - un problème résolu servira forcément à autrui.

    Tes interventions et celles des autres m'ont énormément fait progressé sur les webservices, notions complètement vagues il y a une semaine et pour ça je te remercie.

    Le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $xml->auteur->attributes()->val;
    me renvoie un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: main() [function.main]: Node no longer exists in C:\wamp\www\ws\parser.php on line 9
    Je me suis dit que c'était p'tet le @ dans [@attributes] mais ca n'y change rien.

    Bien à toi.

    HPL

  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
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->attributes()->val;
    apres tu peux toujour faire comme si c'était un array et faire [@attributes]

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    J'avais essayé $xml->attributes()->val; mais nada et le souci c'est que j'ai aussi un autre champ prenom avec un @attribute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Prenom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Arthur) ) [Nom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Rimbaud))

  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 hpl76 Voir le message
    J'avais essayé $xml->attributes()->val; mais nada et le souci c'est que j'ai aussi un autre champ prenom avec un @attribute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Prenom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Arthur) ) [Nom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Rimbaud))
    c'est comme un array pour y accéder y'a pas de mystère derrière, montre ton xml complet

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Merci pour ta réactivité !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $xmlstr = '<query><result><champs id="0"><Prenom Val="Arthur" /><Nom Val="RIMBAUD" /></champs></result></query>
    ';
     
    $xml = new SimpleXMLElement($xmlstr);
     
    echo '<pre>'.print_r($xml).'</pre>';
     
    echo $xml->Prenom->attributes()->Val;
     
    ?>
    Aclmt,

    HPL

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    J'ai réussi à afficher "Arthur" en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $xml->result->champs->Prenom->attributes()->Val;
    Ca sous-entend que tu es pleinement dépendant de la structure. Tu peux pas attaquer à un point précis du xml ?

    Du coup, j'ai du mal à voir ce qui mieux entre une expression régulière et le simplexml...si demain la structure du xml bouge. Comment faire ?

    Il faut réadapter le script à chaque fois ?

    HPL76

  13. #13
    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 hpl76 Voir le message
    Du coup, j'ai du mal à voir ce qui mieux entre une expression régulière et le simplexml...si demain la structure du xml bouge. Comment faire ?
    faudra changer aussi le regexp, utilise une requete xpath sinon

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    C'est cool stealth35, tout fonctionne !!!

    Un exemple pour d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $xmlstr = '<query><result><champs><prenom val="Arthur" /><nom val="RIMBAUD" /></champs></result></query>';
     
    $xml = new SimpleXMLElement($xmlstr);
     
    echo '<pre>'.print_r($xml).'</pre>';
     
    echo $xml->result->champs->prenom->attributes()->val;
    echo ' ';
    echo $xml->result->champs->nom->attributes()->val;
    Cthulhu nfang !

    HPL

Discussions similaires

  1. Echange d'une variable par le biais d'une url
    Par ichida dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/07/2010, 10h33
  2. Réponses: 2
    Dernier message: 19/04/2007, 15h26
  3. Réponses: 2
    Dernier message: 06/04/2007, 12h17
  4. [RegEx] Remplacer partie d'une chaîne par le résultat d'une fonction
    Par SCalc dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2007, 09h41
  5. Réponses: 5
    Dernier message: 24/05/2006, 15h41

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