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 :

extraction d'éléments d'un fichier [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut extraction d'éléments d'un fichier
    Bonjour,

    J'essai d'extraire des éléments d'un fichier rtf depuis mon code php. Donc j'ouvre le fichier, je charge le contenu dans une variable $contenu, et je ferme le fichier.
    Jusque là, c'est du standard, pas de soucis.

    Les éléments à récupérer sont entre <ksfsdfs>.
    J'utilise preg_match de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $pattern = '/<(.*)>/';
    preg_match_all($pattern, $contenu, $matches, PREG_OFFSET_CAPTURE);
    echo "<pre>";
    print_r($matches);
    echo "</pre>";
    Le souci c'est qu'il ne s'arrête pas que à ce qu'il y a entre les <>. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [0] => ARECUP1>}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f39\fs18\insrsid3946394  }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f39\fs18\insrsid16727547\charrsid16727547  27236
    Et en plus si j'ai 2 balises <sdfssdf> sur la même ligne, idem, il ne me récupère pas correctement. Auriez-vous une idée svp ?

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    faut rajouter un "U" dans ton pattern (ungreedy) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '/<(.*)>/U';


    Les boutons et existent, servez-vous en

  3. #3
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    Ah ? il sert à quoi le U ? Je regarde sur la doc php, ils l'utilisent, mais n'expliquent pas sa fonction.

    Sinon j'ai finalement réussi à faire ce queje voulais avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<([^>]+)>/';
    Merci

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par zerros Voir le message
    Ah ? il sert à quoi le U ? Je regarde sur la doc php, ils l'utilisent, mais n'expliquent pas sa fonction.

    Sinon j'ai finalement réussi à faire ce queje voulais avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<([^>]+)>/';
    Merci
    Je trouve pas d'explication vraiment clair du mode Ungreedy, mais en gros ca permet de s'arrêter au premier match et non au dernier, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $content = '<strong>test</strong>blablabla blablabla <strong>retest</strong>';
     
    // Sans le mode Ungreedy
    $pattern = '/<strong>(.+)<\/strong>/';
    preg_match_all($pattern, $content, $matches);
     
    print_r($matches);
     
    // Avec le mode Ungreedy
    $pattern2 = '/<strong>(.+)<\/strong>/U';
    preg_match_all($pattern2, $content, $matches2);
     
    print_r($matches2);
    Resultat sans Ungreedy :

    Array ( [0] => testblablabla blablabla retest )
    Resultat avecUngreedy :

    Array ( [0] => test [1] => retest ) )

    Un bout de code est plus parlant qu'une longue explication


    Les boutons et existent, servez-vous en

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

Discussions similaires

  1. Extraction des éléments d'un fichier *.msg.
    Par gilouu dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/04/2012, 15h48
  2. lecture d'éléments dans mon fichier
    Par gillou4 dans le forum C
    Réponses: 9
    Dernier message: 23/10/2005, 16h19
  3. Réponses: 7
    Dernier message: 20/09/2005, 17h47
  4. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53
  5. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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