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 motif [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut Expression régulière et motif
    Bonjour,

    voila je voudrais faire une recherche avec les expressions régulières suivant un motif seulement je sèche un peu et je sais qu'ici on m'aidera

    Voila mon code actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    	$ma_chaine = "__salut la forme ?__ coucou c'est tranquille ! __c'est les vacances__";
    	echo $ma_chaine."<br/>";
     
    	$pattern = "((^__)(.*)(__$))";
    	$ma_chaine_traitee = eregi($pattern, $ma_chaine, $regs);
     
    	echo "une fois traitée 0: ".$regs[0]."<br/>";
    	echo "une fois traitée 1: ".$regs[1]."<br/>";
    ?>
    Seulement avec cette expression là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "((^__)(.*)(__$))";
    il va tout à la fin de l'expression moi je voudrais qu'il s'arrête à la seconde occurence de '__'

    Au final je voudrais $regs[1] = __salut la forme ?__ et $regs[2] = __c'est les vacances__

    Je sens que je suis loin du compte, mais vous vous en serez apperçu je suis pas trop ami ami avec les regexp ...

    quelqu'un peut-il m'aider ?

    Merci

  2. #2
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonsoir,

    J'ai repris ce que tu avais fait en utilisant la fonction preg_replace.
    Ça pourra peut-être t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ma_chaine = "__salut la forme ?__ coucou c'est tranquille ! __c'est les vacances__";
    echo $ma_chaine."<br/>";
     
    $pattern = "/^__(.*)__(.*)__(.*)__$/";
     
    echo "Première capture : __".preg_replace($pattern,'\\1',$ma_chaine)."__<br/>";
    echo "Deuxième capture : __".preg_replace($pattern,'\\2',$ma_chaine)."__<br/>";
    echo "Troisième capture : __".preg_replace($pattern,'\\3',$ma_chaine)."__<br/>";
    Fred

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Bonsoir

    déjà merci pour ta réponse micetf

    maintenant je vais corser un peu la chose ... (du moins pour moi car je n'ai aucune idée de comment faire)

    dans cet exemple, on sait combien de redondance il y a dans l'expression à traiter (ici 3), seulement pour la "mise en production" de mon code je ne connaîtrais pas le nombre de redondance car il va s'agir d'article d'une base de données donc ce nombre d'occurrence pourra changer du tout au rien !

    J'imagine que le motif sera unique du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "/^__(.*)__$/";
    je pense qu'il faut lui interdire la chaîne '__' à l'intérieur du modèle, est-ce comme ceci (je sens la grosse erreur merdique) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "/^__([^__])__$/";
    et comment lui dire de parcourir à nouveau ma chaîne de départ ?

    Peux-tu m'aiguiller encore une fois ?
    please

  4. #4
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    J'ai pas mangé et j'ai faim, faite à l'apéro prolongé, mais il me reste encore assez de neurones pour vous conseiller d'utiliser preg_match_all

    A suivre...

  5. #5
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonsoir,

    Merci à s.n.a.f.u pour ses conseils.
    Pendant qu'il mangeait pour faire passer l'apéro ,
    j'ai creusé du côté du preg_match_all
    et voilà ce que j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $ma_chaine = "__salut la forme ?__ coucou c'est tranquille ! __c'est les vacances__";
    echo $ma_chaine."<br/>";
     
    $pattern = "/__.*?(?=__)/";
    preg_match_all($pattern,$ma_chaine,$result);
     
    foreach ($result[0] as $chaine) {
    	echo $chaine."__<br/>";
    }
    @The Goion : C'est ce que tu voulais ?

    Fred

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Merci s.n.a.f.u et pardon de ne pas avoir votre niveau, mais faut bien débuter un jour me semble-t-il ?

    j'en déduis que preg_match_all repère toutes les occurrences du motif, donc j'imagine que le motif ci dessous est bon, mais je me trompe !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ma_chaine = "__salut la forme ?__hey toto __ coucou c'est tranquille__ !";
    $pattern = "/^__(.*)__$/";
    $result = preg_match_all($pattern, $ma_chaine, $matches, PREG_SET_ORDER);
     
    echo "Result : ".$result."<br/>";
    echo "Taille : ".sizeof($matches)."<br/>";
     
    foreach ($matches as $val)
    {
    	echo "Enregistrement : ".$val[0]."<br/>";
    	echo "Enregistrement : ".$val[1]."<br/>";
    }
    d'après la doc php $matches contient les valeurs de retour seulement dans mon cas j'obtiens comme résultat:
    salut la forme ?__hey toto __ coucou c'est tranquille


    donc mon motif n'est pas le bon ....
    encore un peu d'aide svp

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Je m'excuse pour le post précédent .. je devais le rédiger au moment de ton post micetf

    en tout cas oui, j'ai bien le retour désiré je te remercie pour ton temps et ton aide

    bonne soirée et merci encore je vais enfin pouvoir avancer

  8. #8
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bon boulot, mais à mon avis, l'assertion avant est superflue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $ma_chaine = "__salut la forme ?__ coucou c'est tranquille ! __c'est les vacances__";
    $pattern = "/__(.*?)__/";
    preg_match_all($pattern,$ma_chaine,$result);
    print_r($result[1]);

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

Discussions similaires

  1. Expressions régulières - Motif géométrique
    Par aloysius_tim dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2015, 11h24
  2. [DATA] Condensation de motifs répétés dans une expression régulière
    Par JeromeMATHIAS dans le forum SAS Base
    Réponses: 0
    Dernier message: 13/12/2011, 10h30
  3. répétition de motif, expression régulière
    Par Jasmine80 dans le forum Langage
    Réponses: 13
    Dernier message: 08/08/2011, 14h29
  4. Réponses: 27
    Dernier message: 25/02/2010, 00h45
  5. [RegEx] Motif d'une expression régulière
    Par The Goion dans le forum Langage
    Réponses: 5
    Dernier message: 08/07/2009, 22h32

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