Jonas Skrevet 20. mai 2008 Del Skrevet 20. mai 2008 (endret) Hei, Har et ørlite problem med et lite message-board jeg implementerer på en side. Har nemlig en quote-funksjon, som tilsynelatende fungerer helt fint helt til en nøster to quotes inn i hverandre. Eksempel [quote] [quote]Først post.[/quote] Andre post. [/quote] Tredje og siste post. Meningen er at det skal se ut som følgende. Først post.Andre post.Tredje og siste post. Problemet er at regex-uttrykket matcher første start-tag og første slutt-slutt tag, noe som ødelegger nøstingen. Resultatet blir noe lignende som dette. Andre åpnings-tag og siste slutt-tag blir igjen, da regex naturligvis ikke matcher det som ligger nøstet inni hverandre. Slik er det nå [ quote]Først post.Andre post.[ /quote]Tredje og siste post. /\[quote\](.*?)\[\/quote\]/is $post = preg_replace ( '/\[quote\](.*?)\[\/quote\]/is', '<div class="quote">$1</div>', $post ); Har sett litt på regular-expressions.info, som skriver litt om det som omhandler akkurat dette, men klarer ikke å bruke det i mitt eget uttrykk. Noen som kjapt ser en åpenbar løsning som gjør uttrykket greedy? Takk på forhånd. - Jonas Endret 20. mai 2008 av Jonas Lenke til kommentar
Raring Skrevet 20. mai 2008 Del Skrevet 20. mai 2008 (endret) Hva om du bare kjører str_replace() da? f.eks: $string = str_replace("[quote]","<div class=\"quote\">", $string); $string = str_replace("[/quote]","</div>", $string); Endret 20. mai 2008 av Raring Lenke til kommentar
trrunde Skrevet 20. mai 2008 Del Skrevet 20. mai 2008 hva med å lage en funksjon som teller antall og lager nøstingen ut i fra dette? Lenke til kommentar
Jonas Skrevet 20. mai 2008 Forfatter Del Skrevet 20. mai 2008 (endret) Raring - str_replace() er alltid en mulighet i slike tilfeller, men dette ødelegger layoutet mitt dersom en ikke fullfører tags og det liker jeg ikke. ttrunde - hvordan kan det hjelpe meg? Altså, å kjenne antallet. Edit: Jeg antar du tenker slik at en kan telle antall forekomster av fullførte tags og erstatte med str_replace()? Ved å begrense antall erstatninger unngår man at ikke-fullførte tags ødelegger layout. Edit: Forslaget fungerte. Utrolig stygg måte å gjøre det på, håper egentlig det finnes en bedre løsning. while ( preg_match ( '/\[quote\](.*?)\[\/quote\]/is', $post ) ) { $post = preg_replace ( '[\[quote\]]', '<div class="quote">', $post, 1 ); $post = preg_replace ( '[\[\/quote\]]', '</div>', $post, 1 ); } Endret 20. mai 2008 av Jonas Lenke til kommentar
Runar0 Skrevet 20. mai 2008 Del Skrevet 20. mai 2008 (endret) du kan da ta vekk ? fra .*?, da vil det bli greedy, men det blir nok bare problem det og vist du har følgende eks: [quote] Første [quote] Andre [/quote] [/quote] [quote] tredje [/quote] da den vil matche første og siste[ /quote] Endret 20. mai 2008 av Runar0 Lenke til kommentar
Lokaltog Skrevet 20. mai 2008 Del Skrevet 20. mai 2008 Jeg bruker løsningen som er oppgitt i PHP-manualen, og det fungerer helt perfekt (Example #3). Lenke til kommentar
Garanti Skrevet 21. mai 2008 Del Skrevet 21. mai 2008 Ja, en må vel benytte callback/recursive i sånne tilfeller... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå