Einen fertigen BBCode parser?

Hi,

wäre mal daran interessiert was Du sagen würdest, wenn Dir jemand eine solche Antwort geben würde.

Versuche ja gerade selbst einen zu schreiben, allerdings hab ich ein REGEX Problem. Er sollte normalerweise beim ersten Auftauchen des schließenden Tags ein replace durchführen. Das macht er bei meinem REGEX immer nur am letzten.

PHP:
/**
 * Replace the bb code markup language with html
 * and css conform declarations.
 */
function replaceBBCode($str) {

  $str = eregi_replace("(\[b\])(.*)(\[/b\])","<span style=\"font-weight:bold;\">\\2</span>", $str);
  $str = eregi_replace("(\[i\])(.*)(\[/i\])","<span style=\"font-style:italic;\">\\2</span>", $str);
  $str = eregi_replace("(\[u\])(.*)(\[/u\])","<span style=\"text-decoration:underline;\">\\2</span>", $str);
  $str = eregi_replace("(\[url\])(.*)(\[/url\])","<a href=\"\\2\">\\2</a>", $str);
  
  return nl2br($str);
}

Vielleicht kann mir dabei ja jemand helfen.

Gruß

Romsl
 
Zuletzt bearbeitet:
Naja, ich stelle solche Fragen garnicht erst :-)
Und was ich nicht weis, suche ich (z.B. mit Google).

Es gibt viele Foren, wo der BBCode eingebaut ist, wo ist das Problem mal eine zu suchen und anzuschauen (die frei verfügbar ist) ?
 
Prinzipiell sind die Quantoren „gierig“. Probier deshalb mal Folgendes:
PHP:
/** 
 * Replace the bb code markup language with html 
 * and css conform declarations. 
 */ 
function replaceBBCode($str) { 
	$trans = array(
		'#\[b\](.*?)\[/b\]#i'     => '<span style="font-weight:bold">\1</span>',
		'#\[i\](.*?)\[/i\]#i'     => '<span style="font-style:italic">\1</span>',
		'#\[u\](.*?)\[/u\]#i'     => '<span style="text-decoration:underline">\1</span>',
		'#\[url\](.*?)\[/url\]#i' => '<a href="\1">\1</a>'
	);
	foreach( $trans as $pattern => $replace ) {
		$str = preg_replace($pattern, $replace, $str);
	}
	return nl2br($str);
}
 
Zurück