[gull] expressions régulières sous php

magnus magnus at magooweb.com
Sun Dec 5 18:46:03 CET 2004


Re,

J'ai changé tes paterns (supprimant la fin)

$str = "<foo>hello there</foo>\n<foo>go there</foo>\n";
echo $str;

#$str1 = preg_replace("%<foo.*hello.*</foo>%Us","replaced1", $str);
$str1 = preg_replace("%<foo.*hello.*</foo>%","replaced1", $str);
echo $str1;

res:

replaced1
<foo>go there</foo>

#$str2 = preg_replace("%<foo.*go.*</foo>%Us","replaced2", $str);
$str2 = preg_replace("%<foo.*go.*</foo>%","replaced2", $str);
echo $str2;

<foo>hello there</foo>
replaced2

C'est ce que tu voulais... Je pense que c'est en rapport avec les 
paramètres par défaut, mais pour greedy... ?

Bonne fin de dimanche,

Magnus


patrick jayet wrote:

> Hello Magnus!
>
> Merci pour ta réponse.
>
> | Il est clair que celà va fonctionner pour tout $str. php ne va pas faire
> | attention au fait que tu fermes ton tag.
> | Il applique la recherche à toute la variable. Et il trouve ce qu'il
> | cherche même s'il y a une possibilité + petite (en taille).
> |
> | Tant que tu n'as pas de tag à plusieurs niveau
> | (<foo><foo2>kldsflkjf</foo2></foo>) tu devrais séparer $str (en deux
> | dans ton exemples). Et ensuite appliquer ta recherche.
>
> Mais justement, dans mes expressions régulières, j'utilise le paramêtre
> U, ce qui veut dire que je lui indique d'être par défault non greedy
> (non gourmant). Donc il devrait chercher les chaînes de charactère
> minimales pour (.*) afin de trouver un match. Et cela fonctionnne
> effectivement pour ma 1e des 2 expression (autrement il matcherait
> également la totalité de <foo>..</foo><foo>..</foo>, or il ne match que
> le 1e tag <foo>..</foo>).
>
> Y a-t'il un autre prob dans mon expressions régulière?
>
> Bonne journée!
>
> Pat
>
>
> |> $str = "<foo>hello there</foo>\n<foo>go there</foo>\n";
> |> echo $str;
> |>
> |> <foo>hello there</foo>
> |> <foo>go there</foo>
> |>
> |> $str1 = preg_replace("%<foo.*hello.*</foo>%Us","replaced1", $str);
> |> echo $str1;
> |>
> |> replaced1
> |> <foo>go there</foo>
> |>
> |> $str2 = preg_replace("%<foo.*go.*</foo>%Us","replaced2", $str);
> |> echo $str2;
> |>
> |> replaced2

_______________________________________________
gull mailing list
gull at lists.alphanet.ch
http://lists.alphanet.ch/mailman/listinfo/gull




More information about the gull mailing list