|
| 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/
| |
|
|