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 :

Capture expression régulière XML


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut Capture expression régulière XML
    Bonjour,
    Je n'arrive pas a capture une phrase dès qu'elle est coupée en plusieurs lignes:

    Contenu du fichier fic.txt :
    fic.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	<loFi>
    		<![CDATA[http://a.rrrrr.v/x/fr/news/454545]]>
    	</loFi>
    script php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $datas=file_get_contents('fic.txt');
    $datas=preg_replace('/<loFi>.*<\/loFi>/','',$datas);
    Cela ne marche pas, il ne capture rien
    Si j'ai fic.txt qui vault:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <loFi><![CDATA[http://a.rrrrr.v/x/fr/news/454545]></loFi>
    La mon script capture bien la ligne

    Comment fait pour prendre en compte ces retours a la ligne ?

    Merci beaucoup pour votre aide

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Si tu dois parser un contenu XML, la meilleure solution ne sera jamais d'utiliser les expressions régulières mais plutôt les fonctions spécifiques.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Si tu dois parser un contenu XML, la meilleure solution ne sera jamais d'utiliser les expressions régulières mais plutôt les fonctions spécifiques.
    Je comprend, mais j'utilise un script qui ne sait traiter que des flux avec ce format:

    Code xml : 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
    <item>
    <guid>
    ffffffff</guid>
    <title>
    ffffffffff/title>
    <pubDate></pubDate>
    <enclosure length="150" url="http://sffffffffff.jpg" type="image/jpeg" />
    <description>
    fffffff</description>
    <link>
    http://www.ffffffffffffff</link>
    <category domain="http://www.ffffffffffffff">fffffffffff</category>
    <category domain="hfffffffffffff">fffffffff</category>
    <category>fffffffffff</category>
    <category domain="http://www.ffffffffffff">fffffffffff</category>
    <category domain="http://www.ffffffffffff">West Bromwich</ffffffffffffff>
    <comments></comments>
    </item>

    Et celui qui m'a été donné est comme ceci:
    Code xml : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <article id="ffffffffff" mainSection="33" targetSections="45,444,12268">
    	<lastUpdated>	2014-01-20 21:48:00 UTC</lastUpdated>
    	<createdAt>	2014-01-20 21:29:47 UTC</createdAt>
    	<images>
    	<imagePath><![CDATA[http://ddddddddddddddg]]></imagePath>
    	<imageTinyPath><![CDATA[http://ddddddddddd]]></imageTinyPath>
    	<imageSmallPath><![CDATA[http://sddddddddddddddddjpg]]></imageSmallPath>
    	<imageThumbPath><![CDATA[http://ddddddddddd]]></imageThumbPath>
    	<imageMediumPath><![CDATA[http://dddddddddddddddd]]></imageMediumPath>
    	<imageLandscapePath><![CDATA[http://dddddddddd]]></imageLandscapePath>
    	</images>
    	<urls>
    		<site><![CDATA[http://dddddddddddddddd
    		</site>
    	<loFi>
    		<![CDATA[http://ddddddddddddd]]>
    	</loFi>
    	<hiFi>
    		<![CDATA[http://ddddddddddd]]>
    	</hiFi>
    	</urls>
    	<author>
    	<![CDATA[]]>
    	</author>
    	<title>
    	<![CDATA[dddddddddddddddddd]]>
    	</title>
    	<description>
    	<![CDATA[dddddddddddddddddd]]>
    	</description>
    	<articleText>
    	<![CDATA[Dddddddddddddd;]]>
    	</articleText>
    	<sms>
    	<smsContent>
    	<![CDATA[]]>
    	</smsContent>
    	<smsMoment>
    	<![CDATA[]]>
    	</smsMoment>
    	</sms>
    </article>


    Et plus simple pour est de remplacer les balises et de supprimer celle-ci qui ne m'intéresse pas

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Est-ce comme ça vous va?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$datas=preg_replace('/<loFi>.*<\/loFi>/','',$datas);
    $datas=preg_replace('/<loFi>[\s\S]*?<\/loFi>/','',$datas);

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Anti-hero de Films Comiques
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Anti-hero de Films Comiques

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Dans ta question initiale, ta chaine de remplacement est '', ce qui suggere que tu veux effacer tout le bloc.

    Dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ligne = '    <loFi>
            <![CDATA[http://a.rrrrr.v/x/fr/news/454545]]>
        </loFi>';
    echo preg_replace('~(?s)<loFi>([\R\s]*)[^\R\s]*(?1)</loFi>~','RIEN',$ligne);
    // tout ce code est remplace par "RIEN"
    Mais si tu veux remplacer la ligne du milieu par quelque chose,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ligne = '    <loFi>
            <![CDATA[http://a.rrrrr.v/x/fr/news/454545]]>
        </loFi>';
    echo htmlentities(preg_replace('~(?s)<loFi>([\R\s]*)\K[^\R\s]*(?=(?1)</loFi>)~','KEK CHOSE',$ligne));
     
    /* Ca produit:
     
     <loFi> KEK CHOSE </loFi>
     
     */

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 60
    Points
    60
    Par défaut et Domdocument dans tout ça ?
    Pourquoi ne pas passer par la classe domDocument ?
    Celle-ci possède des fonctions de récupération de noeuds et éléments intéressants pourtant, tout en gérant les CDATA...

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2008, 08h28
  2. [RegEx] Capture avec expression régulière par ereg
    Par pimpmyride dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2008, 14h09
  3. [RegEx] Expression régulière pour balises XML
    Par vodasan dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2008, 08h31
  4. Expressions régulières et groupes capturants
    Par ®om dans le forum Langage
    Réponses: 1
    Dernier message: 09/01/2008, 15h37
  5. [débutant] XML ou expressions régulières ?
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 28/10/2004, 16h17

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