[gull] expressions régulières sous php

magnus magnus at magooweb.com
Sun Dec 5 12:32:01 CET 2004


Salut,

Dans le premier cas tu recherches qqch qui
1. commence par <foo
2. qui est suivit de caractères (.*)
3. suivit de "hello"
4. suivi de caractères (.*)
5. terminé par </foo>

Dans le second cas:
1. commence par <foo
2. qui est suivit de caractères (.*)
3. suivit de go
4. suivi de caractères (.*)
5. terminé par </foo>

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.

N'y a-t-il pas de parser XML dans php?

Bonne journée

Magnus

patrick jayet wrote:

> Bonsoir à tous!
>
> Petite question sur les expressions régulières sous php. J'ai un petit
> problème avec la "greediness" du processing. Voici le code:
>
> $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
>
>
> Je ne comprend pas pourquoi j'obtiens 2 choses différentes suivant que
> je fait un match du 1e tag <foo></foo> ou du 2e. L'option U est sensé
> désactiver le greediness (ce qui est bien le cas lors de la 1e
> substitution). Mais pour la 2e, ça ne semble pas marcher.
>
> Quelqu'un aurait-il une idée?
>
> Bon week-end!
>
> Pat

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




More information about the gull mailing list