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 :

regex simple qui ne marche pas (encore) [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut regex simple qui ne marche pas (encore)
    Bonjour,
    L'objectif de mon regex est de virer d'une chaine comprenant du xhtml la balise ouvrante et fermante <p></p>

    exemple de string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $string='<p>je suis nul en regex, 
    heureusement qu\'il y a les <a href="http://www.developpez.net">copains</a></p>';
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string='<p>Violon <a href="http://www.maudlovett.com" hreflang="fr">site de Maud</a></p>'
    ne cherchez pas la complication, je ne veux dégager que la premiere et dernière balise.

    voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getoup($string)
    {
    	if(preg_match('#<p>([^"]*)</p>#', $string, $out))
    	{
    	   return $out[1];	
    	}
    	else
    	{
    	   return '(pas encore de description)';	
    	}
    }
    je ne comprends pas pourquoi ca marche pas toujours
    si la chaine n'est pas vide, il doit me retourner le string sans le <p></p>
    merci de votre aide

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(?<=<p>)(.*)(?=</p>)#sU
    Te renverra tout ce qui se trouve entre les balises <p> et </p> de ta page. le s à la fin c'est pour que ça fonctionne même lorsque <p> et </p> ne sont pas sur la même ligne, et le U c'est pour éviter d'avoir tout ce qui se trouve entre la première balise <p> de ta page, et la dernière balise </p> de la même page. D'ailleurs pour pouvoir stocker tous les contenus des balises <p></p>, il faudra que tu utilises preg_match_all, preg_match ne cherchant que la première chaine de caractère correspondant à ton motif.

    (?<=<p>) signifie suivant directement <p> et (?=</p>) tu l'auras deviné, précédant directement </p>.

    edit : Après lecture des post qui suivent, et relecture de ton post, ma réponse est un peu à côté de la plaque (pour ne pas dire complètement !). Je ne sais pas pourquoi j'avais compris que tu voulais stocker dans une variable/tableau ce qu'il y avait entre chaque balise <p></p>

  3. #3
    mon_nom_est_personne
    Invité(e)
    Par défaut
    un petit tour par la http://jp2.php.net/manual/fr/function.preg-match.php me fait dire que preg_match compare un motif et une chaine et ne retire rien. par contre si je vais la http://jp2.php.net/manual/fr/function.preg-replace.php tout desuite ca va mieux. ensuite me viens a me demander, si tu sais que tu auras toujours des <p> str_replace sera bien plus efficaces, voir meme un rtrim ou un ltrim.
    apres si tu veux virer les balises la bonne formule serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function getoup($string)
    {
            $str = preg_replace('^<.*>|<.*>$', '',$string, $out);
    	if($out > 0)
    	{
    	   return $str;	
    	}
    	else
    	{
    	   return '(pas encore de description)';	
    	}
    }

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Personnellement je vois pas l'intérêt d'utiliser des assertions, et encore moins une REGEX
    Si le but c'est de supprimer <p> et </p> tu peux utiliser str_replace('<p>', '', $str), str_replace('</p>', '', $str)
    Vive les roues en pierre

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    si ça ne fonctionne pas avec les exemple donnés, c'est que dans ton pattern ce qu'il y a entre les balises <p> et </p> ne doit pas contenir de guillemets : [^"]*

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    Merci pour toutes vos réponses, j'ai fais un vilain mid pour aller vite, mais maintenant que j'ai vos réponses, je vais les étudier car j'en ai besoin
    Bon week end à vous

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

Discussions similaires

  1. [RegEx] Regex simple qui ne fonctionne pas
    Par Bruno.C dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2008, 15h05
  2. un programme trop simple qui ne marche pas
    Par smp82 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/10/2008, 15h46
  3. Programme super simple qui ne marche pas!
    Par _Michel dans le forum Visual C++
    Réponses: 2
    Dernier message: 07/01/2008, 18h50
  4. Script tout simple qui ne marche pas sous IE
    Par Bleuarff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2007, 18h48
  5. suivi de session simple qui ne marche pas
    Par mikebranque dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2006, 16h55

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