/ 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
ereg_replace problemer
Fra : Jeppe Vesterbæk


Dato : 08-09-02 13:57

Til bl.a. forums bruger jeg ereg_replace til "mini-html". En bruger kan
f.eks. skrive tekst... som så bliver ændret til <b>tekst...</b> via

$t = ereg_replace("\(.*)\","<b>\\1</b>", $t); //FED

Nu vil jeg dog også gerne have noget java-syntax-markup hvis brugeren
skriver [java]tekst...[/java]. Jeg har med hjælp her fra gruppen fundet
noget kode der klarer dette. Mit problem er bare, at jeg ikke kan kalde
denne funktion (java) fra ereg_replace, altså noget ala:

$t = ereg_replace("\[java](.*)\[/java]", "<pre>" . java('\\1') . "</pre>",
$t); //java-markup

Dette virker ikke. Laver jeg min funktion java til kun at indeholde
function java ($t) {
die($t);
}
så bliver "\1" udskrevet.

Hvad er det lige, jeg gør galt?

/Jeppe



 
 
Peter Brodersen (08-09-2002)
Kommentar
Fra : Peter Brodersen


Dato : 08-09-02 16:56

On Sun, 8 Sep 2002 14:57:07 +0200, "Jeppe Vesterbæk"
<mail[REMOVE-XXXXXXXXXX]@jhv.dk> wrote:

>Til bl.a. forums bruger jeg ereg_replace til "mini-html". En bruger kan
>f.eks. skrive tekst... som så bliver ændret til <b>tekst...</b> via
>
>$t = ereg_replace("\(.*)\","<b>\\1</b>", $t); //FED

Bemærk, at det vil opføre sig uhensigtsmæssigt, hvis man fx har tekst
i stil med:

Dette er fed tekst.

Jeg vil anbefale at bruge preg, samt en lazy regex her:

$t = preg_replace("_\[b\](.*?)\[/b\]_","<b>\\1</b>", $t); //FED

>$t = ereg_replace("\[java](.*)\[/java]", "<pre>" . java('\\1') . "</pre>",
>$t); //java-markup

java('\\1') bliver ikke behandlet af regex'en. En mulighed her er at
bruge preg's e-modifier, der evaluerer string'en. Fx:

$t = preg_replace("_\[java\](.*?)\[/java\]_e","'<pre>'.java('\\1').
'</pre>'", $t);

Så burde det virke som du vil have det.

--
- Peter Brodersen

Jeppe Vesterbæk (08-09-2002)
Kommentar
Fra : Jeppe Vesterbæk


Dato : 08-09-02 17:16

Hej Peter

> Bemærk, at det vil opføre sig uhensigtsmæssigt, hvis man fx har tekst
> i stil med:
>
> Dette er fed tekst.
>
> Jeg vil anbefale at bruge preg, samt en lazy regex her:
>
> $t = preg_replace("_\[b\](.*?)\[/b\]_","<b>\\1</b>", $t); //FED

Ok, det havde jeg ikke lige tænkt på. Da regular expressions er noget helt
nyt for mig, valgte jeg ereg_replace da den umiddelbart så lidt nemmere ud
en preg_replace.

> java('\\1') bliver ikke behandlet af regex'en. En mulighed her er at
> bruge preg's e-modifier, der evaluerer string'en. Fx:
>
> $t = preg_replace("_\[java\](.*?)\[/java\]_e","'<pre>'.java('\\1').
> '</pre>'", $t);

Dette virker hvis jeg skriver [java]noget tekst...[/java], men det virker
ikke over flere linier, altså ala
[java]noget
tekst...[/java]
Her bliver det ikke fanget, og der står bare [java]...

Tak for hjælpen
/Jeppe



Peter Brodersen (08-09-2002)
Kommentar
Fra : Peter Brodersen


Dato : 08-09-02 18:02

On Sun, 8 Sep 2002 18:15:48 +0200, "Jeppe Vesterbæk"
<mail[REMOVE-XXXXXXXXXX]@jhv.dk> wrote:

>Ok, det havde jeg ikke lige tænkt på. Da regular expressions er noget helt
>nyt for mig, valgte jeg ereg_replace da den umiddelbart så lidt nemmere ud
>en preg_replace.

De fleste ereg_replace-udtryk kan snildt omskrives til preg_replace.
Der skal blot en delimiter på før og efter udtrykket, hvor jeg har
brugt _, idet du ikke bruger dette tegn i dit udtryk.

ereg-udgaven: \(.*)\","<b>\\1</b>

bliver altså til preg-udgaven: _\(.*)\","<b>\\1</b>_

Den eneste egentlige ændring er, at dit udtryk er gået fra at være
grådigt: (.*) - til at være lazy: (.*?)
Jeg mener ikke at lazy udtryk er muligt uden videre for ereg.

Derudover har jeg så tilføjet et par ekstra backslashes foran dine ].
Ikke strengt nødvendigt, men om ikke andet vil jeg ikke personligt
komme i tvivl, hvis jeg hurtigt skal skimme udtrykket om fx nogle
måneder (og udtrykket i øvrigt var noget større).

>> $t = preg_replace("_\[java\](.*?)\[/java\]_e","'<pre>'.java('\\1').
>> '</pre>'", $t);
>
>Dette virker hvis jeg skriver [java]noget tekst...[/java], men det virker
>ikke over flere linier, altså ala
>[java]noget
> tekst...[/java]
>Her bliver det ikke fanget, og der står bare [java]...

.. matcher som udgangspunkt ikke en newline i preg. Det er der endnu en
modifier (s), der kan sørge for, så den kan vi lige tilføje. Det
gælder i øvrigt også for [b]-udtrykket. De to udtryk bliver således
til:


// Fed tekst
$t = preg_replace("_\[b\](.*?)\[/b\]_s","<b>\\1</b>", $t); //FED

// Java
$t = preg_replace("_\[java\](.*?)\[/java\]_es","'<pre>'.java('\\1').
'</pre>'", $t);

--
- Peter Brodersen

Jeppe Vesterbæk (08-09-2002)
Kommentar
Fra : Jeppe Vesterbæk


Dato : 08-09-02 19:31

> . matcher som udgangspunkt ikke en newline i preg. Det er der endnu en
> modifier (s), der kan sørge for, så den kan vi lige tilføje. Det
> gælder i øvrigt også for [b]-udtrykket. De to udtryk bliver således
> til:

Super, det virker jo bare ...

Mange tak for hjælpen.

/Jeppe



Jesper Brunholm (09-09-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 09-09-02 13:09

Jeppe Vesterbæk wrote:
> Til bl.a. forums bruger jeg ereg_replace til "mini-html". En bruger kan
> f.eks. skrive tekst... som så bliver ændret til <b>tekst...</b> via
>
> $t = ereg_replace("\(.*)\","<b>\\1</b>", $t); //FED

Undskyld hvis jeg spørger dumt, men var det ikke smartere at bruge
str_replace - så vidt jeg umiddelbart kan dechiffrere så tager du ikke
højde for at man skal kunne skrive style ind i dine html-tags, så der er
vel ikke væsentlig varians i fra- og til-taggene?

mvh

Jesper Brunholm

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


Peter Brodersen (09-09-2002)
Kommentar
Fra : Peter Brodersen


Dato : 09-09-02 19:45

On Mon, 09 Sep 2002 14:08:45 +0200, Jesper Brunholm
<nospam@brunholm-scharff.dk> wrote:

>> $t = ereg_replace("\(.*)\","<b>\\1</b>", $t); //FED
>Undskyld hvis jeg spørger dumt, men var det ikke smartere at bruge
>str_replace - så vidt jeg umiddelbart kan dechiffrere så tager du ikke
>højde for at man skal kunne skrive style ind i dine html-tags, så der er
>vel ikke væsentlig varians i fra- og til-taggene?

Man sikrer om ikke andet, at man kun starter fed tekst, hvis den
bliver lukket efterfølgende. En tekst som:

"Det er fedt og det bliver bare [b]ved"

.... skal ikke have fed tekst startet i slutningen, idet den så blot
ville kunne fortsætte ud på resten af siden.

--
- Peter Brodersen

Søg
Reklame
Statistik
Spørgsmål : 177519
Tips : 31968
Nyheder : 719565
Indlæg : 6408659
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste