|
|||||||||||||||||||||||||||
On Tue, 23 Nov 1999, Carsten Svaneborg wrote:
> Mit perl program sætter &\=undef og læser hele filen ind som en
> streng, fjerner derefter microsoft tags som bgcolor etc. men
> jeg kan ikke få ovenstående til at virke. Hvis $fyle indholder
> filen så prøver jeg:
>
> $fyle =~ s/<\s*body(\s*)>(\s*[^<][^!][^-][^-][^#])/<body$1><!--# ..
> -->$2/gsi;
[^<] vil matche alt udover <, det betyder så at denne regexp matcher ikke
hvis det første tegn efter mellemrum efter > er <. Den vil ikke kigge på
resten af regexpen.
Desuden vil du også erstatte det der du match
I øvrigt står der \s* after body, det dækker kun over spaces. Måske vil du
have .*? som vil tage alt ikke grådigt (så den fortsætter så lidt som
muligt)
Jeg tror ikke det kan lade sig gøre med een regexp, ikke når du har den
"\s*" der. Der er noget der hedder negative lookahead men det kan AFAICS
ikke bruges når du har den \s*. Derfor vil jeg foreslå to regexps:
s/<\s*body(.*?)>/<BODY$1><!--#whatever--!>/gi
unless /<\s*body(.*?)\s*<!--/i;
Hvis du skal lave noget mere kompliceret med HTML var det måske en ide at
bruge en af de HTML-parsere der er i Perl, som kan bryde hele HTML-teksten
i elementer osv.
--
==============================================================================
Erwin Andreasen Herlev, Denmark <sslug@sslug> UNIX System Programmer
<URL:http://www.andreasen.org> <*> Goodbye, Richard!
==============================================================================
|
||||||||||||||
|
||||||||||||||