Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

remplacement de chaine: regexp.

16 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Bonjour,
J'ai du code XHTML non valide en masse.
C'est esentiellement beaucoup de
<input xxxxxxxxx>
qui faut remplacer en
<input xxxxxxxxx />
dans xxxxxxx il peut y avoir tout ce que la norme permet qu'il y a,
c'est à dire des attributs et donc les caractères spéciaux qui en découlent.

Pour construire l'expression rationelle qui va matcher, je dis:
"les chaines contenant "<input " suivi de n'importe quel caractère sauf
">" jusqu'au premier ">" rencontré sont à remplacer par la meme chaine,
mais en insérant un "/" avant le ">".

Je ne sais meme pas comment batir la regexp...
Un coup de main SVP
Je compte implémenter la chose en Perl ensuite.
Mais le suivi est d'abord proposé sur fcou.

Merci d'avance.

6 réponses

1 2
Avatar
Paul Gaborit
À (at) Tue, 25 Sep 2007 16:12:38 GMT,
Stephane Chazelas écrivait (wrote):
J'ai préfixé les '<', '>' par un backslash car ces caractères
risquent d'avoir un sens particulier dans les prochaines versions de
Perl.


C'est quelquechose dont tu aurais eu vent?


C'est evoqué, par exemple, dans :

<http://fr.wikipedia.org/wiki/Perl_6#Expressions_rationnelles>

Certes, ce n'est pas exactement '<' et '>' seuls qui deviennent
spéciaux mais c'est perturbant quand même surtout pour quelqu'un qui
débute en regexp... Il vaut mieux prévenir que guérir. ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>


Avatar
Paul Gaborit
À (at) Tue, 25 Sep 2007 16:12:38 GMT,
Stephane Chazelas écrivait (wrote):
2007-09-25, 16:52(+02), Paul Gaborit:
[...]
Ça donne (en syntaxe Perl) :

$code_XHTML_invalide =~
s{ # on substitue les chaînes
<input # contenant "<input "
([^>]*?) # puis n'importe quels caractères sauf ">"
# (mémorisés)
> # jusqu'au premier ">"
}{<input$1 />}gx; # on insère le / final

[...]


Note que le ? plus haut n'est pas necessaire, ou alors, on peut
ecrire: s{<input (.*?)>}...


Oui. J'étais parti sur l'idée de (.*?) puis j'ai remplacé le . par
[^>] (pour coller à la demande) sans supprimer le ? qui devient
effectivement inutile.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>


Avatar
zahg
In article <fdavuv$em0$,
"Mihamina (R12y) Rakotomandimby" wrote:

Bonjour,
J'ai du code XHTML non valide en masse.
C'est esentiellement beaucoup de
<input xxxxxxxxx>
qui faut remplacer en
<input xxxxxxxxx />
dans xxxxxxx il peut y avoir tout ce que la norme permet qu'il y a,
c'est à dire des attributs et donc les caractères spéciaux qui en découlent.

Pour construire l'expression rationelle qui va matcher, je dis:
"les chaines contenant "<input " suivi de n'importe quel caractère sauf
">" jusqu'au premier ">" rencontré sont à remplacer par la meme chaine,
mais en insérant un "/" avant le ">".

Je ne sais meme pas comment batir la regexp...
Un coup de main SVP
Je compte implémenter la chose en Perl ensuite.
Mais le suivi est d'abord proposé sur fcou.

Merci d'avance.


peut être avec ça : s/<input(.*?)>/<input$1/>/i


--
klp
--
zaHg

Avatar
kurtz le pirate
In article <fdavuv$em0$,
"Mihamina (R12y) Rakotomandimby" wrote:

Bonjour,
J'ai du code XHTML non valide en masse.
C'est esentiellement beaucoup de
<input xxxxxxxxx>
qui faut remplacer en
<input xxxxxxxxx />
dans xxxxxxx il peut y avoir tout ce que la norme permet qu'il y a,
c'est à dire des attributs et donc les caractères spéciaux qui en découlent.

Pour construire l'expression rationelle qui va matcher, je dis:
"les chaines contenant "<input " suivi de n'importe quel caractère sauf
">" jusqu'au premier ">" rencontré sont à remplacer par la meme chaine,
mais en insérant un "/" avant le ">".

Je ne sais meme pas comment batir la regexp...
Un coup de main SVP
Je compte implémenter la chose en Perl ensuite.
Mais le suivi est d'abord proposé sur fcou.

Merci d'avance.



pet être avec ça : s/<input(.*?)>/<input$1/>/i;

--
klp

Avatar
xylo
utilise http://search.cpan.org/~oembry/HTML2XHTML-0.03.08b/lib/HTML2XHTML/HTML2XHTML.pod

--
Apply rot13 to this e-mail address before using it.
JM Marino
http://jm.marino.free.fr
Avatar
Ouipique
Bonjour,

je ne sais pas si tu as eu réponse sur fcou, au cas où...

C'est esentiellement beaucoup de
<input xxxxxxxxx>
qui faut remplacer en
<input xxxxxxxxx />
dans xxxxxxx il peut y avoir tout ce que la norme permet qu'il y a,
c'est à dire des attributs et donc les caractères spéciaux qui en
découlent.

Pour construire l'expression rationelle qui va matcher, je dis:
"les chaines contenant "<input " suivi de n'importe quel caractère sauf
">" jusqu'au premier ">" rencontré sont à remplacer par la meme chaine,
mais en insérant un "/" avant le ">".


s/<input ([^>]*)>//>/g;

Je ne sais meme pas comment batir la regexp...


exactement comme tu l'as dit.

Un coup de main SVP
Je compte implémenter la chose en Perl ensuite.


essaye alors ce que je te propose.

@+
Ouipique.

1 2