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 :

Problème d'utilisation de preg_match_all() [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut Problème d'utilisation de preg_match_all()
    Bonjour,

    Je dois recuperer une chaine de caractère dans un document nommé info.txt.
    extrait du document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    General #0
    Count                : 179
    Count of stream of t : 1
    Kind of stream       : General
    StreamKindID         : 0
    (...)
    File size            : 1.845 MiB
    PlayTime             : 74480
    J'ai supprimé les espaces du document et ajouté des $ en fin de ligne pour faciliter le parsing.

    Voila mon code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?
     
    $fp = fopen("./info.txt","r"); //lecture du fichier
     
    while (!feof($fp)) { //on parcoure toutes les lignes
     
      $page .= trim(fgets($fp, 4096))."$"; // lecture du contenu de la ligne
     
    } 
    $page=str_replace(" ","",$page);
    preg_match_all("@Filesize:(.*)$@",$page,$out,PREG_PATTERN_ORDER);
    echo $out[1][0];
    fclose($fp);
    ?>
    Je souhaite donc récupérer en sortie la valeur associée à File size (ici : 1.845 MiB). Mais actuellement, je recupère une chaine contenant tout ce qu'il y a après le File size: et pas juste le bout de la ligne.

    Merci d'avance

    Guillaume

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Attention le $ a une signification bien particulière dans les expressions régulières : il signifie 'fin de la chaine'...

  3. #3
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Perso je le ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $s = file_get_contents('./info.txt');
     
    preg_match_all('`File size\s*:\s([^\n]*)`', $s, $matches);
     
    var_dump($matches);
     
    ?>

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Oui utiliser $ c'est pas tres malin... Commence par changer ca

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Ok merci pour toutes les réponses...
    je vais tester vos solutions.

    Guillaume

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Encore merci...
    Les deux solutions proposées fonctionnent très bien et me donne le même résultat. Y'en a t'il une à privilégier en terme de sécurité ou d'efficacité?

    Guillaume

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Bonjour,

    Si tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php  
     
    $fp = fopen("./info.txt","r"); //lecture du fichier   
    while (!feof($fp)) { //on parcoure toutes les lignes   
    $page .= trim(fgets($fp, 4096))."\n"; // lecture du contenu de la ligne   
    } 
    var_dump($page);
    $page=str_replace(" ","",$page); 
    preg_match_all("@Filesize:(.*)@",$page,$out,PREG_PATTERN_ORDER); 
    var_dump($out); 
    fclose($fp); 
    ?>
    Ca semble mieux fonctionner, en fait pourquoi séparer tes lignes par des $ au lieu de laisser des \n et donc de laisser preg_match_all() s'arreter a chaque ligne?

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

Discussions similaires

  1. [RTFEditorKit] Problème d'utilisation
    Par jean.lamy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/10/2004, 18h30
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  3. [cvs] problèmes d'utilisation
    Par gromite dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h41
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

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