Testa med
$pattern = "/\[citat=([^\]]+)](.*?)\[\/citat]/is";
$replace = "
<table style=\"margin-left: 10px;\">
<tr>
<td>$1 skrev:<br /><hr>$2<br /><hr></td>
</tr>
</table>
";
$text = preg_replace($pattern, $replace, $text);
34 svar · 1 471 visningar · startad av lillebror
Hej!
Behöver lite hjälp med ett uttryck då jag själv inte är en mästare på detta!
Koden som jag vill ska detekteras är följande:
VÄNSTERKLAMMERCITAT=username]Text Text[/CITATHÖGERKLAMMER
Denna kod vill jag ska ersättas med:
<table style="margin-left: 10px;">
<tr>
<td>Username skrev:<br /><hr>Text Text<br /><hr></td>
</tr>
</table>
Några idéer? :)
Testa med
$pattern = "/\[citat=([^\]]+)](.*?)\[\/citat]/is";
$replace = "
<table style=\"margin-left: 10px;\">
<tr>
<td>$1 skrev:<br /><hr>$2<br /><hr></td>
</tr>
</table>
";
$text = preg_replace($pattern, $replace, $text);
Pattern:
\[citat\=([^\]]+)]([\s\S]+?)\[\/citat\]
Byt ut mot:
<table style="margin-left: 10px;">
<tr>
<td>$1 skrev:<br /><hr>$2<br /><hr></td>
</tr>
</table>
Äsch, så här blir det när man får samtal mitt i inläggsskrivandet. Mattes kod är bra med jag skulle vilja byta ut (.*?) mot ([\s\S]+?).
Då klarar den även av radbrytningar i citatet. :)
Modifikatorn /s fixar så att den tar med radbrytningar också :)
Ok!
Matte, som vanligt kom du med en strålande och fungerande lösning :) Erik, tack för dina tips också!
Citat-funktionen blev väldigt lik den som finns här på wF. Dock löser inte regexp-uttrycket ut att hantera en citering av ett redan citerat inlägg? Ett citat i citatet alltså! Hur kan man lösa detta med regexp? :OO
Då får du ersätta starttagg resp sluttagg var för sig.
Matte skrev:
Då får du ersätta starttagg resp sluttagg var för sig.
Öh va? :q Hur menar du?
Kan man inte använda preg_replace och få funktionen att applicera min replace-del på alla förekomster av den angivna pattern? Talar jag i tungor nu eller var det där begripligt det jag skrev? :e
Grejen är att man inte vet om det är en eller flera citat inom ett citat, eller om det är flera nivåer. Ej heller vet man om det kan finnas flera citat som inte ligger i varandra.
Det är m.a.o. väldigt svårt att hitta vilken som hör ihop med
.
Därför måste du då ta din citat och /citat var för sig, om du vill kunna ha citat inom citat.
Alltså köra funktion fler gånger efter varann?
Snarare något i stil med:
$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");
$replace[] = "
<table style=\"margin-left: 10px;\">
<tr>
<td>$1 skrev:<br /><hr>
";
$replace[] = "
<br /><hr></td>
</tr>
</table>
";
$text = preg_replace($pattern, $replace, $text);
Men varför använda en <table> när du bara har en cell ?
Varför inte istället använda en <div> eller något ?
Tråden flyttas från PHP..
Matte skrev:
Snarare något i stil med:
$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is"); $replace[] = " <table style=\"margin-left: 10px;\"> <tr> <td>$1 skrev:<br /><hr> "; $replace[] = " <br /><hr></td> </tr> </table> "; $text = preg_replace($pattern, $replace, $text);
Fortsätter på denna tråd då jag inte haft tid att åtgärda problemet med citat i citaten förrän nu. Så den kod som är ovan, är den uppbyggd för att klara av just detta fenomen? Ser att $pattern innehåller en array men kan inte riktigt tolka vad som händer i själva uttrycket med de två replace-uttrycken som kommer lite längre ner. :)
Det första mönstret ($pattern) ersätts med det första $replace, det andra mönstret med den andra replace.
När jag implementerad ovanstående kod får jag följande felmeddelande:
[B]Fatal error:[/B] [] operator not supported for strings in
sökväg c:\xxx\fil.php on line 117
Vad kan vara fel?
Koden ser ut så här:
$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");
$replace[] = "<table style=\"margin-left:10px;\"><tr><td>$1 skrev:<br /><hr>";
$replace[] = "<br /><hr></td></tr></table>";
$reply['content'] = preg_replace($pattern, $replace, $reply['content']);
echo nl2br($reply['content']); ?>
Fungerar hur bra som helst när jag testar.
Har du några konstigheter med arryen $reply ?
Vad får du om du kör print_r() på den, före din replace ?
Matte skrev:
Vad får du om du kör print_r() på den, före din replace ?
Följande information skrivs ut från ett testinlägg som jag gjorde med dubbla citat:
[CITAT=Fredrik][CITAT=Fredrik]Test[/CITAT] Test igen...[/CITAT] Ännu ett test...
Nu kan jag ju inte skriva ut det så att det blir rätt utan wF tolkar det precis så som jag vill att mitt ska bli tolkat :e
Jag vet inte vad jag gjorde eller inte gjorde men vips så fungerade allting galant. haha. Så märkligt det kan vara ibland :)
Bifogar en bild med resultatet. Tack för hjälpen än en gång! :e
P.S. Är det smidigare att använda en div istället för en table? Du skrev något om det tidigare.