Willkommen in der Webstatt Zum Webstatt Blog und Stories
Wasili am 26.04.06 20:26

Ich habe BB-Codes und gebrauche diese Funktion (Selbst gebastelt ^^):
function ParseBBCode($data)
{
$pattern = array(
"#\[B\]([^\[B\]]*)\[/B\]#i", // Fett
"#\[I\]([^\[I\]]*)\[/I\]#i", // Kursiv
"#\[U\]([^\[U\]]*)\[/U\]#i", // Unterstrichen

"#\[SUB\]([^\[\]]*)\[/SUB\]#is", // Tiefgestellt
"#\[SUP\]([^\[\]]*)\[/SUP\]#is", // Hochgestellt
//"#\[U\]([^\[\]]*)\[/U\]#is",

// PHP-BBCode
//'#\[php\](.*?)\[\/php\]#sei'
);

$replacement = array(
"<strong>\\1</strong>",
"<em>\\1</em>",
"<span style='text-decoration: underline;'>\\1</span>",

"<sub>\\1</sub>",
"<super>\\1</super>",

// PHP-BBCode
//"'<div class=\"php\">'.highlight_string(stripslashes('$1'), true).'</div>'"
);

$data = preg_replace($pattern,$replacement,$data);

//$data = preg_replace_callback('#\[php\](.*?)\[\/php\]#si',array(&$this,"ParsePHPBBCode"),$data);
return $data;
}


Funktioniert eigentlich auch schön und gut. Nur tritt das Problem auf, dass manche Treffer gar nicht getroffen werden.
So sind zum Beispiel *hier* die ersten 5 Zeilen Fett, die nächsten 5 nicht, dann wieder die letzten 2 Fett geschrieben.
*hier* hingegen sind die ersten 2 Zeilen Fett, dann kommen 3 Zeilen auf die der RegExp scheinbar nciht zutrifft :(

Hat wer ne Idee was isch falscht gemacht hab? :)

netcup.de Warum gibt es hier Werbung?
Michael Michael am 26.04.06 20:43

Nur ganz grob

Quote
"#\[B\]([^\[B\]]*)\[/B\]#i"


Du definierst, dass die Zeichen zwischen [ b ] und [ /b ] weder [ NOCH b NOCH ] sein dürfen. Also kann kein Teil fett markiert werden, der ein 'b' enthält - wie alle deine nicht-funktionierenden Beispiele ;)

Du kannst das Problem einfach umgehen, wenn du auf "ungreedy" umstellst

/\[b\](.*?)\[\/b\]/

Michael

// edit

Du hast natürlich Recht. Die [ und ] müssen im Regex escaped werden. Ich habe das oben einmal editiert.
Schön, dass ich helfen konnte.

Wasili am 26.04.06 20:49

Dass mir das nicht aufgefallen ist :O
Stimmt, alle haben ein b drin... Dooof...

Achja, irgendwie scheint es von nöten [ und ] auch zu maskieren, ansonsten bleiben [] im Text :)


Danke sehr, funktioniert nun endlich einwandfrei =)

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt