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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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 émérite
    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
    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';

  3. #3
    Membre éclairé
    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
    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 émérite
    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
    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

+ 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