Expression régulière : extraire une chaine variable d'une chaine

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par evets, 4 Septembre 2012.

  1. evets
    evets WRInaute discret
    Inscrit:
    16 Septembre 2004
    Messages:
    244
    J'aime reçus:
    0
    Bonjour à tous,

    Voilà 2 heures que je galère avec une expression régulière :-( J'espère trouver de l'aide ici

    C'est très simple, je cherche la forme de mon expression pour pouvoir extraire "Paris (75000)" de ma chaine "/oujhabite/Paris (75000)/toto

    A savoir que oujhabite et toto sont fixes. Ca a l'air super simple mais je ne trouve pas d'exemple me débloquant...

    Voici ma dernière tentative : ^oujhabite(*)toto$

    Merci pour votre aide
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
  3. evets
    evets WRInaute discret
    Inscrit:
    16 Septembre 2004
    Messages:
    244
    J'aime reçus:
    0
    Merci pour ta réponse

    Malheureusement, ma patate peut se transformer en purée parfois :wink: ou en petit pomme dauphine :(

    En effet, je peux avoir :
    /oujhabite/Paris (75000)/toto
    /oujhabite/Bordeaux (33000)/toto
    /oujhabite/Saint-Jean-de-la Patate (53000)/toto

    Pour être plus précis, ma chaîne ressemble à ceci :

    <div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>

    Je crains devoir utiliser obligatoirement un bulldozer
     
  4. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    Non je ne pense pas a moins que l'énoncé ne soit pas bon (édit > ou incomplet).

    Avec exp reg bien lourd
    PHP:
    <span class="syntaxdefault"><?php<br />    $dataGlobal </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'<div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ereg_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"^.*oujhabite."</span><span class="syntaxkeyword">,</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$dataGlobal</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ereg_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"/.*$"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    echo $data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">?></span>
    avec de la manipulation de chaines
    PHP:
    <span class="syntaxdefault"><?php    <br />    $dataGlobal </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'<div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $debut </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> stripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dataGlobal</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'oujhabite/'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 10</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//10 -> nombre de caractère du masque de recherche<br /></span><span class="syntaxdefault">    $fin </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> stripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dataGlobal</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'/toto'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dataGlobal</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $debut</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $fin</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">$debut</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    echo $data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">?></span>
     
  5. evets
    evets WRInaute discret
    Inscrit:
    16 Septembre 2004
    Messages:
    244
    J'aime reçus:
    0
    Merci ! Tu as raison. Le strpos m'a mis sur la piste.
     
  6. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    autre solution avec un preg match mais il te faudra rajouter du calcul ce qui rend la solution plus bête que la précédente qui fait la même chose sans le preg_match.

    PHP:
    <span class="syntaxhtml"><span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">php<br />&nbsp;&nbsp;&nbsp;&nbsp;$dataGlobal&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">'<div&nbsp;class="month&nbsp;mini-day-on"><a&nbsp;href="http://monsite.fr/oujhabite/Paris&nbsp;(75000)/toto/">mapatate</a></div>'</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$expreg&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">preg_match&nbsp;</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'|oujhabite.*toto|'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$dataGlobal</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$matches</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="syntaxdefault">$matches</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">&nbsp;</span></span>
    qui va te renvoyer un truc comme "oujhabite/Paris (75000)/toto" qu'il faudra nettoyer pour avoir ton résultat.
     
  7. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 119
    J'aime reçus:
    1
    tu as aussi la version explode :

    Code:
    $zechaine="oujhabite/Paris (75000)/toto";
    $zetab=explode("/", $zechaine);
    $zevilleandcp=$zetab[1];
    Pas sur que ca soit le plus performant (quoique a la reflexion probablement si puisque juste un explode) mais c'est le plus court et le plus simple en terme de code :mrgreen: en tout cas juste une petite cuillère et pas un tracto pelle :wink:

    et ensuite si tu veux la ville et le cp séparés tu ajoutes dessous

    Code:
    $zetab2=explode(" (", $zevilleandcp);
    $zeville=$zetab2[0];
    $zecp=str_replace(")","",$zetab2[1];
    
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Euuuuhhh...

    Code:
    preg_match('#oujhabite/(.*?)/toto#',$chaine,$matches);
    (le résultat est dans $matches[1])

    Ou pour récupérer la ville et le CP séparément:
    Code:
    preg_match('#oujhabite/(.*?) \\(\\d+\\)/toto#',$chaine,$matches);
    (les deux résultats sont dans $matches[1] et $matches[2])

    Non?

    Jacques.
     
  9. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 119
    J'aime reçus:
    1
    ben vi mais quand on maitrise pas les exp reg ... un explode ca se comprend de suite et se maintient facile ensuite :wink:
     
  10. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 682
    J'aime reçus:
    39
    Ou bien :

    Code:
      // On supprime le suffixe, et on pmet dans une array...
      $array_str = preg_split("#[\/]+#", preg_replace("#\/toto$#", "", $str));
    
      // ... Le résultat se trouve à la fin de l'array. ;)
      $resul = $array_str(count($array_str) - 1];
    
    
    

    J'avoue que je ne conais pas les subtilités des regexp PCRE... ;(

    Une buse, quoi.

    Bien amicalement.

    Jean François Ortolo
     
  11. evets
    evets WRInaute discret
    Inscrit:
    16 Septembre 2004
    Messages:
    244
    J'aime reçus:
    0
    Merci a tous !!
     
Chargement...
Similar Threads - Expression régulière extraire Forum Date
Expression régulière pour extraire une chaine entre 2 tags Administration d'un site Web 21 Juin 2005
Idées d'expressions régulières utiles en SEO Référencement Google 17 Mai 2021
Une expression régulière pour la home et un sous répertoire ? Google Analytics 22 Juin 2016
problème avec expression regulière en java Développement d'un site Web ou d'une appli mobile 21 Août 2015
PHP Expressions Régulières ! Modifier plusieurs occurences Développement d'un site Web ou d'une appli mobile 5 Août 2015
Création d'objectif et expression régulière analytics Google Analytics 15 Janvier 2015
Expression régulière Objectif Google Analytics 1 Février 2014
Expression reguliere récuperer ses backlinks Développement d'un site Web ou d'une appli mobile 2 Mai 2013
Expressions régulières début et fin de mot Développement d'un site Web ou d'une appli mobile 11 Août 2012
Expression régulière en objectif Google Analytics 31 Mai 2012
Expressions régulières et filtre Google Analytics Google Analytics 18 Avril 2012
Expressions régulières entonnoir de conversion Google Analytics 3 Février 2012
Expression régulière simple mais je bloque Référencement Google 16 Décembre 2011
Expression régulière pour rechercher/remplacer Dreamweaver Développement d'un site Web ou d'une appli mobile 5 Décembre 2011
Expression régulière MySql REGEXP pour transformer des liens Développement d'un site Web ou d'une appli mobile 26 Septembre 2011
expressions régulieres et fichier robots Débuter en référencement 27 Mai 2011
Expressions Régulières ! J'ai une question Développement d'un site Web ou d'une appli mobile 12 Avril 2011
Problème expression régulière Développement d'un site Web ou d'une appli mobile 1 Avril 2011
PHP Expression régulière : rendre clickable toutes les url d'un texte Débuter en référencement 16 Février 2011
Expression régulière URL Rewriting et .htaccess 4 Février 2011