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 :

Extraire du texte situé entre deux séparateurs différents [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Extraire du texte situé entre deux séparateurs différents
    Bonjour,
    Pour extraire certaines parties d'un code, j'aimerai pouvoir récupérer des morceaux de texte qui se situent entre deux séparateurs.

    Un exempe, mon fichier serait comme suit :

    xxxxxxxxxxxxxxxxxx
    xxxxxxxxx
    /begin
    xxxxxxxxxxxx
    /end
    xxx
    xxxxxx

    Comment est-il possible de récupérer la partie située entre /begin et /end ?

    Merci d'avance pour votre réponse.

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux utiliser ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $subject = 'xxxxxxxxxxxxxxxxxx
    xxxxxxxxx
    /begin
    le texte
    à extraire
    /end
    xxx
    xxxxxx';
    $pattern = '`/begin(.*)/end`is';
    preg_match($pattern, $subject, $matches);
    echo $matches[1];
    ?>
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse

    Je viens d'essayer avec des séparateurs "simples" et ça marche nickel.

    Par contre, j'aurai besoin de l'utiliser aussi avec "\title{" comme balise de début et "}" comme balise de fin, et ça m'a pas l'air de marcher.

    Si tu (ou quelqu'un d'autre) vois une modification à apporter au code, ça me serait d'un grand secours.

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, je viens d'essayer ce code est ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $subject = 'xxxxxxxxxxxxxxxxxx
    xxxxxxxxx
    \title{le texte à extraire}
    xxx xxxxxx';
    $pattern = '`title{(.*)}`is';
    preg_match($pattern, $subject, $matches);
    echo $matches[1];
    ?>
    Qu'est-ce que tu veux dire par ça m'a pas l'air de marcher ?
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Ca ne marchait pas parce que je prenait "\title{" comme balise de début, alors que "title{" suffit.

    Merci bien maintenant ça marche nickel

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Erf, voilà que j'ai encore un problème...

    Maintenant j'ai une chaine de caractères comme suit :

    xxxxxxxxx
    xxxxxxxxx
    \title{ titre }
    \author{ auteur }
    xxxxx
    xxxxxxx

    Comme il trouve plusieurs accolades fermantes, il prend en compte la dernière...
    Comment faire pour qu'il utilise la première qu'il voit ?

    Merci beaucoup pour ton aide.

    Tant que j'y suis, tu sais ou je pourrais trouver une doc assez complète sur preg_match() ? Parce que j'ai l'impression qu'il n'y a pas grand chose dans celle du manuel php, et si ça continue j'ai pas fini de te poser des questions...

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il faut utiliser l'option (flag) de non gourmandise U (en fin d'expression régulière), en modifiant le code de Nesmoutou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '`title{(.*)}`isU';
    Les expressions régulières sont, par défaut, gourmandes en PHP. Il faut comprendre par là, que PHP cherchera à établir la correspondance sur la partie la plus longue possible de la chaîne sujet.

    Pour ce qui est des liens :



    Julp.

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci à vous deux, maintenant tout marche nickel !

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

Discussions similaires

  1. [RegEx] Modifier un texte situé entre deux <br>
    Par vinshe dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2014, 20h32
  2. [RegEx] Extraction de texte situé entre deux balises
    Par cedricp38 dans le forum Langage
    Réponses: 4
    Dernier message: 10/09/2012, 13h54
  3. [RegEx] Extraction de texte situé entre deux balises
    Par morpho365 dans le forum Langage
    Réponses: 7
    Dernier message: 27/03/2007, 18h18
  4. Réponses: 5
    Dernier message: 10/04/2006, 12h07
  5. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01

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