Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 265

Enregistré le: 16 Sep 2004

Message le Mar Sep 04, 2012 15:15

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
Haut
10 Réponses
Messages: 13571

Enregistré le: 5 Déc 2004

Message le Mar Sep 04, 2012 16:19

evets a écrit:A savoir que oujhabite et toto sont fixes.

http://php.net/manual/fr/function.substr.php
http://www.php.net/manual/fr/function.strlen.php
Un démonte pneu pour changer une roue de tracteur c'est classe mais un bulldozer pour déterrer une patate c'est naze :wink:
Haut
Messages: 265

Enregistré le: 16 Sep 2004

Message le Mar Sep 04, 2012 16:37

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
Haut
Messages: 13571

Enregistré le: 5 Déc 2004

Message le Mar Sep 04, 2012 17:20

evets a écrit:Je crains devoir utiliser obligatoirement un bulldozer

Non je ne pense pas a moins que l'énoncé ne soit pas bon (édit > ou incomplet).

Avec exp reg bien lourd
Code: Tout sélectionner
<?php
    $dataGlobal 
= '<div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>';
    $data = ereg_replace("^.*oujhabite.","",$dataGlobal);
    $data = ereg_replace("/.*$","",$data);
    echo $data;
?>


avec de la manipulation de chaines
Code: Tout sélectionner
<?php    
    $dataGlobal 
= '<div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>';
    $debut = stripos($dataGlobal, 'oujhabite/') + 10; //10 -> nombre de caractère du masque de recherche
    $fin = stripos($dataGlobal, '/toto');
    $data = substr ($dataGlobal, $debut, $fin-$debut);
    echo $data;
?>
Haut
Messages: 265

Enregistré le: 16 Sep 2004

Message le Mar Sep 04, 2012 17:33

Merci ! Tu as raison. Le strpos m'a mis sur la piste.
Haut
Messages: 13571

Enregistré le: 5 Déc 2004

Message le Mar Sep 04, 2012 17:37

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.

Code: Tout sélectionner
<php
    $dataGlobal 
'<div class="month mini-day-on"><a href="http://monsite.fr/oujhabite/Paris (75000)/toto/">mapatate</a></div>';
    
$expreg preg_match ('|oujhabite.*toto|',$dataGlobal,$matches);
    echo 
$matches[0];
 

qui va te renvoyer un truc comme "oujhabite/Paris (75000)/toto" qu'il faudra nettoyer pour avoir ton résultat.
Haut
Messages: 12445

Enregistré le: 1 Mar 2005

Message le Mar Sep 04, 2012 17:39

tu as aussi la version explode :

Code: Tout sélectionner
$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: Tout sélectionner
$zetab2=explode(" (", $zevilleandcp);
$zeville=$zetab2[0];
$zecp=str_replace(")","",$zetab2[1];
Haut
Messages: 2820

Enregistré le: 13 Fév 2004

Message le Mar Sep 04, 2012 22:37

Euuuuhhh...

Code: Tout sélectionner
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: Tout sélectionner
preg_match('#oujhabite/(.*?) \\(\\d+\\)/toto#',$chaine,$matches);


(les deux résultats sont dans $matches[1] et $matches[2])

Non?

Jacques.
Haut
Messages: 12445

Enregistré le: 1 Mar 2005

Message le Mer Sep 05, 2012 7:48

ben vi mais quand on maitrise pas les exp reg ... un explode ca se comprend de suite et se maintient facile ensuite :wink:
Haut
Messages: 2742

Enregistré le: 14 Aoû 2002

Message le Mer Sep 05, 2012 11:17

Ou bien :

Code: Tout sélectionner

  // 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
Haut
Messages: 265

Enregistré le: 16 Sep 2004

Message le Mer Sep 12, 2012 22:39

Merci a tous !!
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.