Nu har jeg omskrevet det regulære udtryk en smule, så det ser således ud:
$str = preg_replace("/(>)([^<]*)orm([^>]*)(<)/","\\1\\2HURRA\\3\\4",$str);
Men det er ikke særligt elegant. Det virker umiddelbart, men hvis nogen
har et bedre forslag modtages det med kyshånd
MVH Christian
Christian Hansen wrote:
> Hej
>
> Jeg har brug for at kunne lave en søg/erstat på et ord eller en orddel i
> et htmldokument.
>
> Jeg vil gerne gøre dette via et regulært udtryk, men jeg kan ikke rigtig
> få det til at virke.
>
> problemet er at ordet eller ordelen ikke må være del af et htmltag.
>
> Følgende lille phpscript gør ikke som jeg vil have at den skal gøre.
>
> <?php
>
> $str = "
> <ul><li><a href=\"#id173\" class=\"normal\">Luft og vand og orme</a>
> <li><a href=\"#id174\" class=\"normal\">Går komposteringen for
> langsomt ?</a> <li><a href=\"#id175\" class=\"normal\">Hvor lang tid
> tager det - og hvornår skal komposten bruges ?</a> <li><a
> href=\"#id176\" class=\"normal\">Hvor skal komposteren stå ?</a>
> <li><a href=\"#id177\" class=\"normal\">Sorteringsvejledning</a> <li><a
> href=\"#id178\" class=\"normal\">Mere litteratur</a> </ul>
>
> ";
>
> $str = preg_replace("/([^<]*)orm([^>]*)/","\\1HURRA\\2",$str);
>
> print $str;
>
> ?>
>
> Men næsten. Ved første li erstatter den faktisk ikke orm i
> class="normal", men den gør det alle efterfølgende steder.
>
> Det er jo sikkert fordi at udtrykket kigger på mindst mulige match og
> "norma" falder jo inden for rammerne af ([^<]*)orm([^>]*). Det underlige
> er bare at den ikke gør det første gang.
>
> Og ja, jeg skal bruge perl-kompatible udtryk, da jeg har brug for at
> kunne evaluere (/e) kode i replacement delen.
>
> hjælp
>
> MVH Christian
>