/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
matche ord eller ordel i html
Fra : Christian Hansen


Dato : 26-06-02 12:19

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&aring;r komposteringen for
langsomt ?</a> <li><a href=\"#id175\" class=\"normal\">Hvor lang tid
tager det - og hvorn&aring;r skal komposten bruges ?</a> <li><a
href=\"#id176\" class=\"normal\">Hvor skal komposteren st&aring; ?</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


 
 
Jonas Koch Bentzen (26-06-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-06-02 11:04

Christian Hansen skrev:
>
> 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.

Brug strip_tags():


$str = preg_replace("/([^<]*)orm([^>]*)/","\\1HURRA\\2", strip_tags($str));


Christian Hansen (26-06-2002)
Kommentar
Fra : Christian Hansen


Dato : 26-06-02 12:48

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&aring;r komposteringen for
> langsomt ?</a> <li><a href=\"#id175\" class=\"normal\">Hvor lang tid
> tager det - og hvorn&aring;r skal komposten bruges ?</a> <li><a
> href=\"#id176\" class=\"normal\">Hvor skal komposteren st&aring; ?</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
>



Jesper Brunholm (26-06-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 26-06-02 12:05

Christian Hansen wrote:
> Hej
>
> Jeg har brug for at kunne lave en søg/erstat på et ord eller en orddel i
> et htmldokument.

har du prøvet med str_replace() ?

mvh

Jesper Brunholm

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Christian Hansen (26-06-2002)
Kommentar
Fra : Christian Hansen


Dato : 26-06-02 13:58

Jesper Brunholm wrote:
> har du prøvet med str_replace() ?

Jeg har faktisk kigget på den, men den dur ikke.

For det første kan jeg jo ikke afgøre om søgeordet findes inde i et
html-tag, eksempelvis i altværdien til et <a>.

Dernæst har jeg brug for at udtrykket evaluere en stump kode for hvert
match den laver. Det kan man vist heller ikke med str_replace. Det kan
man derimod med perl kompatibelt regulært udtryk. Derfor bruger jeg
preg_replace.

MVH Christian


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste