j'ai un probleme d'expression :
je n'arrive pas à faire remplacer $1 par sa valeur. Quand je fait un
test en mettant directement "<!--[script[$1]script]-->" dans $buffer ~=
... ca fonctionne. que faut il faire de plus ?
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus dans une variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!"; $replace = " poi $1 poi"; $x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
Paul Gaborit
À (at) Mon, 14 Feb 2005 13:31:39 +0100, "Julien C." écrivait (wrote):
j'ai simplifié mon pb dans le message : - en fait entre les balises <!--[script[ .... ]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]--> que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc perlre).
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou perldoc -q balanced)
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML, vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un problème général d'inclusion de code dans du HTML) même si cela est accepté par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me semble bizarre aussi (dans mon souvenir les commentaires en XML ne fonctionnent pas comme des CDATA). À voir...
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a réussi péniblement à le faire une fois, on l'a fait pour toutes les autres fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous interprétez le contenu comme le ferait, par exemple, un navigateur ou un moteur XSL.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 14 Feb 2005 13:31:39 +0100,
"Julien C." <jc63@fri.fr> écrivait (wrote):
j'ai simplifié mon pb dans le message :
- en fait entre les balises
<!--[script[
....
]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]-->
que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc
perlre).
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez
vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des
regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez
aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou
perldoc -q balanced)
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML,
vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un
problème général d'inclusion de code dans du HTML) même si cela est accepté
par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me
semble bizarre aussi (dans mon souvenir les commentaires en XML ne
fonctionnent pas comme des CDATA). À voir...
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup
plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a
réussi péniblement à le faire une fois, on l'a fait pour toutes les autres
fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous
interprétez le contenu comme le ferait, par exemple, un navigateur ou un
moteur XSL.
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 14 Feb 2005 13:31:39 +0100, "Julien C." écrivait (wrote):
j'ai simplifié mon pb dans le message : - en fait entre les balises <!--[script[ .... ]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]--> que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc perlre).
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou perldoc -q balanced)
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML, vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un problème général d'inclusion de code dans du HTML) même si cela est accepté par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me semble bizarre aussi (dans mon souvenir les commentaires en XML ne fonctionnent pas comme des CDATA). À voir...
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a réussi péniblement à le faire une fois, on l'a fait pour toutes les autres fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous interprétez le contenu comme le ferait, par exemple, un navigateur ou un moteur XSL.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
Julien C.
Paul Gaborit wrote:
À (at) Mon, 14 Feb 2005 13:31:39 +0100, "Julien C." écrivait (wrote):
j'ai simplifié mon pb dans le message : - en fait entre les balises <!--[script[ .... ]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]--> que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc perlre).
Ok. c'est vrai que je ne maitrise ps complétement perl ni les Re.
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou perldoc -q balanced)
Pour ca c'est bon. j'obtiens le résultat voulu
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML, vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un problème général d'inclusion de code dans du HTML) même si cela est accepté par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me semble bizarre aussi (dans mon souvenir les commentaires en XML ne fonctionnent pas comme des CDATA). À voir...
en fait c'est des balises que je remplace sur le serveur et le code html généré est propre. c'est un peu comme smarty mais c'est pas des templates compilés.
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus dans une variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!"; $replace = " poi $1 poi"; $x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a réussi péniblement à le faire une fois, on l'a fait pour toutes les autres fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous interprétez le contenu comme le ferait, par exemple, un navigateur ou un moteur XSL.
Paul Gaborit wrote:
À (at) Mon, 14 Feb 2005 13:31:39 +0100,
"Julien C." <jc63@fri.fr> écrivait (wrote):
j'ai simplifié mon pb dans le message :
- en fait entre les balises
<!--[script[
....
]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]-->
que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc
perlre).
Ok. c'est vrai que je ne maitrise ps complétement perl ni les Re.
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez
vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des
regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez
aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou
perldoc -q balanced)
Pour ca c'est bon. j'obtiens le résultat voulu
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML,
vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un
problème général d'inclusion de code dans du HTML) même si cela est accepté
par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me
semble bizarre aussi (dans mon souvenir les commentaires en XML ne
fonctionnent pas comme des CDATA). À voir...
en fait c'est des balises que je remplace sur le serveur et le code html
généré est propre. c'est un peu comme smarty mais c'est pas des
templates compilés.
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus
dans une variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!";
$replace = " poi $1 poi";
$x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup
plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a
réussi péniblement à le faire une fois, on l'a fait pour toutes les autres
fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous
interprétez le contenu comme le ferait, par exemple, un navigateur ou un
moteur XSL.
À (at) Mon, 14 Feb 2005 13:31:39 +0100, "Julien C." écrivait (wrote):
j'ai simplifié mon pb dans le message : - en fait entre les balises <!--[script[ .... ]]-->
il peut y avoir d'autres balises du types <!--[(res|label|image|...)[.*]]--> que j'ai remplacé dans mon messages par (.|n)*?
1- En utilisant le modificateur /s, le . reconnaît aussi le n (cf. perldoc perlre).
Ok. c'est vrai que je ne maitrise ps complétement perl ni les Re.
2- Si vos structures <!--[foobar[...]]--> sont imbriquées et que vous voulez vérifier le niveau d'imbrication, vous ne pourrez pas vous en sortir avec des regexp ou alors il vous faut utiliser des extensions de Perl. Vous pouvez aussi regarder du côté du module Text::Balanced. (cf. perldoc perlfaq6 ou perldoc -q balanced)
Pour ca c'est bon. j'obtiens le résultat voulu
3- Êtes-vous sûr que vos constructions sont légales ? Si c'est pour du HTML, vos scripts ne respectent pas la syntaxe des commentaires HTML (c'est un problème général d'inclusion de code dans du HTML) même si cela est accepté par les navigateurs. Si c'est pour du XHTML, il faudrait vérifier mais cela me semble bizarre aussi (dans mon souvenir les commentaires en XML ne fonctionnent pas comme des CDATA). À voir...
en fait c'est des balises que je remplace sur le serveur et le code html généré est propre. c'est un peu comme smarty mais c'est pas des templates compilés.
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus dans une variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!"; $replace = " poi $1 poi"; $x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
4- Pour ce genre de manipulations, un parser de (X)HTML ou de XML est beaucoup plus sûr et simple à mettre en oeuvre. "simple" dans le sens où lorsqu'on a réussi péniblement à le faire une fois, on l'a fait pour toutes les autres fois. "sûr" dans le sens où vous êtes sûr du résultat obtenu puisque vous interprétez le contenu comme le ferait, par exemple, un navigateur ou un moteur XSL.
Paul Gaborit
À (at) Tue, 15 Feb 2005 09:50:27 +0100, "Julien C." écrivait (wrote):
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus dans une variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!"; $replace = " poi $1 poi"; $x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
Si c'est juste ce problème :
$x = "Time to feed the cat!"; $replace = '"poi $1 poi"'; $x =~ s/(cat)/$replace/ee;
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Tue, 15 Feb 2005 09:50:27 +0100,
"Julien C." <jc63@fri.fr> écrivait (wrote):
en fait mon pb c'est de faire remplacé $1, $2, ... si il sont inclus dans une
variable qui doit remplacé mon texte trouvé.
ex :
$x = "Time to feed the cat!";
$replace = " poi $1 poi";
$x =~ s/cat/$replace/;
Je voudrais que $x contienne "Time to feed the poi cat poi!"
Si c'est juste ce problème :
$x = "Time to feed the cat!";
$replace = '"poi $1 poi"';
$x =~ s/(cat)/$replace/ee;
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>