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 :

expression régulière et php [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 21
    Points : 20
    Points
    20
    Par défaut expression régulière et php
    Bonjour!

    Je dois écrire une expression régulière (PHP) mais j'y arrive pas... Est-ce que quelqu'un pourrait m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <p>
    <a href="/fr/boutique/produits/details/565-agenda-2009-marie-antoinette.html?r=L2ZyL2JvdXRpcXVlL3Byb2R1aXRzLzI1LWFmZmljaGVzLXBhcGV0ZXJpZS8x" title="Agenda 2009 Marie-Antoinette">Agenda 2009 Marie-Antoinette</a>
    Je dois aller chercher le : Agenda 2009 Marie-Antoinette (juste devant </a>)

    En fait, c'est une information qui change souvent (dépendament du produit et ce qui ne change jamais est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <p> // attention au retour de chariot!
    <a href="/fr/boutique/produits/details/
    mon expression est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $titre = '/<p>\s<a href="\/fr\/boutique\/produits\/details\/[?]*>([^<]*)/i';
    mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $url = "http://www.boutiquesdemusees.fr/fr/boutique/produits/".$_POST["cat"]."";
     
    $fichier = file_get_contents($url);
     
    $titre = '/<p>\r<a href="\/fr\/boutique\/produits\/details\/[?]*>([^<]*)/i';
     
    preg_match($titre,$fichier,$resTitre);
     
    <?php print($resTitre[1]) ?>
    est-ce que quelqu'un peut m'aider?

    merciiiiiiiii!!!

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    En admettant que $fichier contienne bien ce que tu souhaites,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $titre_r = '!<p>\\s+<a href="/fr/boutique/produits/details/[^>]+>(.*?)</a>!i';
    preg_match($titre_r, $fichier, $m);
    echo $m[1];

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Je pense qu'il manque l'option "multi-lignes" au pattern précédent.

    De mon côté, j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    // pattern
    $pattern = '#<p>\s*+<a href="/fr/boutique/produits/details/[^>]++>(.*?)</a>#im';
     
    //test
    print "<pre>";
     
    $myString = '<p>
    <a href="/fr/boutique/produits/details/565-agenda-2009-marie-antoinette.html?r=8x" title="Agenda 2009 Marie-Antoinette">Agenda 2009 Marie-Antoinette</a>';
    preg_match($pattern, $myString, $matches);
        var_dump($matches);
    print "\n\n";

  4. #4
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Salut,
    Je pense qu'il manque l'option "multi-lignes" au pattern précédent.
    En fait non puisqu'il n'y a pas d'occurrence de "^" ou "$" dans le pattern

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Merci!
    Wow! Merci, ça fonctionne!!! (Désolée de ne pas avoir répondu avant, je devais étudier pour un exam et j'ai mis la prog de côté...).

    J'ai cependant 2-3 questions.

    Pourquoi au début et à la fin, il y a les ! ou #, alors que dans mon cours, au début et à la fin, on doit mettre /. Si je met / avec vos expressions, ça ne fonctionne pas...

    On ne doit pas échapper les / ?

    Pourquoi le \\s au lieu de \s ?

    Merci!!!
    Isabelle

  6. #6
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    C'est justement pour ne pas devoir échapper les "/" qu'on utilise parfois d'autres délimiteurs que le très conventionnel "/".
    Les délimiteurs alternatifs les plus utilisés sont "#", "~" ou "!". Mais peut importe le caractère du moment qu'il figure au début et à la fin du pattern.

    Par habitude dans une chaîne je mets souvent "\\" plutôt que "\" même quand ce n'est pas requis. Dans le contexte là, "\s" ou "\\s" c'est pareil.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par goodpz Voir le message
    En fait non puisqu'il n'y a pas d'occurrence de "^" ou "$" dans le pattern
    Tout à fait exact, mea culpa !
    Citation Envoyé par goodpz
    C'est justement pour ne pas devoir échapper les "/" qu'on utilise parfois d'autres délimiteurs que le très conventionnel "/".
    Encore une fois exact, mais pour vulgariser un peu, je préciserais que ça permet de ne pas confondre un / comme délimiteur de l'expression et un / à l'intérieur de l'expression. En choisissant un autre délimiteur, la confusion est impossible.
    PS : Ne pas oublier le bouton si la solution te va

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

Discussions similaires

  1. [RegEx] Expression régulière en PHP
    Par david64 dans le forum Langage
    Réponses: 3
    Dernier message: 20/01/2012, 19h18
  2. [RegEx] Construction de l'expression régulière avec php
    Par glodybiss4 dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2012, 12h10
  3. [PHP 5.0] expressions régulières en PHP
    Par Souri84 dans le forum Langage
    Réponses: 10
    Dernier message: 19/04/2011, 13h29
  4. [RegEx] Expressions régulières en PHP
    Par goldorax113 dans le forum Langage
    Réponses: 3
    Dernier message: 12/05/2006, 10h20
  5. [RegEx] Expression régulière en PHP
    Par sansouna24 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 22h44

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