/ 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
to mellemrum til kursiv
Fra : Leonard


Dato : 11-12-02 12:40

Jeg vil gerne have så man ved at skrive to mellemrum og så noget tekst
og to mellemrum, så får teksten imellem de dobbelte mellemrum vist i
kursiv.
Jeg har denne:
   $tekst = ereg_replace(" ([^ ]+)", " <em>\\1</em> ", $tekst);
som fint finder de første to mellemrum og omkranser ordet derefter med
<em>, men jeg ved ikke hvordan jeg får den til at tage flere ord med.
--
mvh Leonard - http://leonard.dk/


 
 
Niels Andersen (11-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 11-12-02 13:01

Leonard wrote in <3df72360.5759132@news.inet.tele.dk>:
> Jeg vil gerne have så man ved at skrive to mellemrum og så noget tekst
> og to mellemrum, så får teksten imellem de dobbelte mellemrum vist i
> kursiv.
> Jeg har denne:
> $tekst = ereg_replace(" ([^ ]+)", " <em>\\1</em> ", $tekst);
> som fint finder de første to mellemrum og omkranser ordet derefter med
> <em>,
> men jeg ved ikke hvordan jeg får den til at tage flere ord med.

To mellemrum efter parentesen:

$tekst = ereg_replace(" ([^ ]+) ", " <em>\\1</em> ", $tekst);

Så tager den kun ord med dobbelt mellemrum på begge sider.
Vil du gerne have flere ord med, så lad være med at kræve "ingen mellemrum"
imellem de to dobbelt-mellemrum:

$tekst = ereg_replace(" (.+) ", " <em>\\1</em> ", $tekst);

Dette giver dog et par problemer. Det ene problem er, hvad nu hvis man
skriver et dobbelt-mellemrum ved en fejl, to gange? Måske med adskillige
afsnit imellem.
Det andet problem: Hvis man bruger tricket flere gange, vil alt mellem
første og sidste gang være kursivt, da "+" er "greedy".

Dette kan klares med pre_replace() i stedet for ereg_replace():

$tekst = preg_replace("/ (.+?) /", " <em>\\1</em> ", $tekst);

I preg_replace() vil et spørgsmålstegn efter "+" og "*" lave dem til
"non-greedy". Altså "match så lidt som muligt".

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Leonard (11-12-2002)
Kommentar
Fra : Leonard


Dato : 11-12-02 17:52

Niels Andersen <niels-usenet@myplace.dk> skrev:

>$tekst = preg_replace("/ (.+?) /", " <em>\\1</em> ", $tekst);
>
>I preg_replace() vil et spørgsmålstegn efter "+" og "*" lave dem til
>"non-greedy". Altså "match så lidt som muligt".

Det virker lige efter hensigten.
En eller anden dag må jeg læse en bog om det her ...
--
mvh Leonard - http://leonard.dk/


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

Månedens bedste
Årets bedste
Sidste års bedste