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 :

preg_match pour recuperer le contenu entre deux expressions [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    Bonjour,
    j'ai un fichier comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    blabla
    tadam
    DO+1+FTDTWU:08:1:1A'
    contenu1
    UA+5877:90
    blabla
    DO+1+JHFBBH:06:1:1A'
    contenu2
    UA+5781:03
    tadam
    j'aimerais recuperer les contenus entre les lignes "DO" et "UA" et donc avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $match[1]="contenu1"
    $match[2]="contenu2"
    je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pattern="#DO.*\r\n(.+)UA#isU";
    preg_match($pattern, $file, $msgContent);
    echo "match(1):<br>", $match[1];
    quand j'enleve les 2 premiers lignes : blabla \n tadam, alors j'ai bien match[1]=contenu1, mais quand je demande match[2] il me dit "Notice: Undefined offset: 2 "

    si je laisse les 2 premieres lignes par contre plus rien ne fonctionne (Notice: Undefined offset: 1).

    je ne suis pas tres 'a l'aise en expressions regulieres et la je seche, donc je compte sur votre aide!
    merci beaucoup d'avance!

  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 726
    Points
    10 726
    Par défaut
    rajout l'option m

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    merci beaucoup mais ça n'a rien change. par contre j'ai trouve une autre fonction, preg_split et je l'ai utilisée, ça me donne ce que je cherchais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $match = preg_split("#DO.*\r\n(.+)UA#isUm", $file, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    sauf que j'ai toujours le 2eme souci. quand je commence 'a "DO" on est bons, mais quand j'ai les premieres lignes j'ai toujours l'erreur

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu utilises preg_match, qui s'arrête au premier résultat trouvé. Si tu veux tous les résultats possibles, il faut utiliser preg_match_all.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 65
    Points
    65
    Par défaut
    c'est bizarre mais ca me donne toujours le meme resultat.
    juste pour info, pourquoi est ce (si c'est le cas) que preg_match vous semble mieux que preg_split?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    preg_split découpe une chaine sur un motif. En gros, c'est un explode amélioré.
    preg_match recherche un motif et le renvoie si il le trouve (preg_match_all retourne toutes les occurrences du motif)
    Par exemple :
    Si tu as une chaine du genre allo125toto000hello et que tu veux récupérer allo, toto et hello, il faut utiliser preg_split et utiliser "3 chiffres" comme motif.

    Si par contre si tu as une chaine du genre #allo#12azertyblabl#toto#chaussette01#hello# et que tu veux allo, toto et hello, il faut utiliser preg_match_all et "encadré par #" comme motif.

    Donc je pense que dans ton cas, c'est preg_match_all qui s'applique.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/03/2010, 10h02
  2. [XPath] Recuperation des noeuds Entre Deux Commentaires
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 03/07/2006, 13h08
  3. Requête pour calculer le temps entre deux dates
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 13h50
  4. Quelle solution pour un transfert sécurisé entre deux machines
    Par choubiroute dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 21/04/2006, 11h20
  5. Réponses: 1
    Dernier message: 27/01/2006, 14h06

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