Gå til innhold

reg. expressions og PHP-funksjoner


Anbefalte innlegg

Sett at jeg har følgende reg. expression:

 

#\[kode\](.+?)\[/kode\]#is

 

Hvis jeg vil hente ut hva brukeren skriver mellom [kode] og [/kode], kan jeg skrive \\1.

 

...men når jeg vil ha det inn i en funksjon, som for eksempel highlight_string(), hva gjør jeg da?

Lenke til kommentar
Videoannonse
Annonse
$data=preg_replace("blabla", "highlight_string(//1)", $data);

 

Noe a la det bør gjøre susen vil jeg tro :)

problemet er at det var akkurat det jeg trodde ville funke, men highlight_string tolket \\1 enten som en vanlig streng eller som to deletegn og et ettall, og ikke som en referanse til hva som kommer fra preg_replace.

Lenke til kommentar

Denne bruker jeg:

$str=preg_replace("/(\[kode])(.+)(\[\/kode\])/isUe", "highlight_string('\\2')",$str);

 

 

Edit: Vet egentlig ikke hvorfor jeg har paranteser rundt [kode] og [/kode].

Du kan alltids prøve koden under, og se om det funker:

$str=preg_replace("/\[kode](.+)\[\/kode\)/isUe", "highlight_string('\\1')",$str);

Endret av sven-o
Lenke til kommentar
Skal prøve den nå. Hva betyr "Ue" etter #is?

U betyr ungreedy. Ettersom greedy er defult ved regulære uttrykk ville dette:

[kode]masse kode...[kode]

Ikke kode

 

[kode][kode]

blitt en stor kodeblokk, istedenfor to små. Altså (.*) spiser opp hele strengen før den slutter på siste [/kode](derav greedy).

 

e gjør så substitusjonen("highlight_string()") skal evalueres som kode. Ellers vil ikke denne funksjonen bli kjørt.

Lenke til kommentar
Prøvde litt med det der, men den taklet ikke at jeg blandet PHP og HTML... Dessuten var det ikke syntax highlighting av en eller annen grunn.

Pussig. Du kan få hele koden jeg bruker:

function replaceCode($str){
   $str = preg_replace("/(\[code])(.+)(\[\/code\])/isUe", "highlite('\\2')",$str);
   return $str;
}


function highlite($text){	
   ob_start();
   highlight_string(stripslashes($text));
   $buffer = ob_get_contents();
  ob_end_clean();
   return "<div class=\"codebox\">".str_replace("\r","",str_replace("\n","",$buffer))."</div>";
}

Lenke til kommentar

Ja, jeg synes det var litt merkelig jeg og, siden jeg har brukt highlight_string mange ganger før på samme server. Alt var slik det skulle være, men alt ble farget svart. Skal teste koden din.

 

Hvorfor bruker du output buffering før/etter highlight_string?

Lenke til kommentar
Hvorfor bruker du output buffering før/etter highlight_string?

I eldre versjoner av php(<4.2.0) returnerte ikke highlight_string() en streng, men skrev det direkte til output. Det gjør det fremdeles, dersom du ikke setter andre argument til true.

Greit med fleksibilitet.

Lenke til kommentar

Hmmmm... Nå funket det helt fint på en testside, men når jeg satte det inn i noe med litt CSS på, forsvant fargene igjen.... :hmm:

 

Tror forresten ikke det er CSS sin feil, siden koden som genereres av PHP mangler massevis av <font>-tagger.

Endret av jorgenindahouse
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...