Hilfe bei einem Textparser (while Schleife)

Pestilence

Mitglied
Ich möchte gerne aus "selbst" definierten Stringketten aus einem Textfelf
gerne Tabellen erstellen. Nur leider habe ich da noch ein kleines Problem an dem ich wohl schon zu lange dran rumbastle, und nun habe ich eine Denkblockade.

Vielleicht fällt jemanden von euch was schlaues ein damit ich wieder einen Denkanstoß in die richtige Richtung bekomme.

Also ich habe folgenden String ($text):

HTML:
:tb::tbh::w=5:a=right:/tbh:<tr><td>Tabellentest</td></tr>:/tb:

:tb::tbh::w=20:a=left:/tbh:<tr><td>Tabellentest2</td></tr>:/tb:

:tb::tbh::w=30:a=right:/tbh:<tr><td>Tabellentest2</td></tr>:/tb:

Und lasse dann diese Funktion darauf los:

PHP:
//Tabellenübersetzung
	while ((strpos($text,":tbh:")!=false) && (strpos($text,":/tbh:")!=false))
    {
		//:tb::tbh::w=80:a=center:/tbh:<tr><td>Tabellentest</td></tr>:/tb:
		
        $startpos_w	=strpos($text,":tbh:")+5;
        $endpos_w	=strpos($text,":a=",$startpos_w);
        $breite		=substr($text,$startpos_w,$endpos_w-$startpos_w);
		
		$breite 	=eregi_replace(':w=', NULL, $breite);
		
		$startpos_a	=strpos($text,":a=")+3;
        $endpos_a	=strpos($text,":/tbh:",$startpos_a);
        $align		=substr($text,$startpos_a,$endpos_a-$startpos_a);
		
		$align 		=eregi_replace(':a=', NULL, $align);		

		$text=eregi_replace('(:tb::tbh::w)+(=[0-9]{1,3})+(:a)+(=[a-z]{1,6})+(:/tbh:)', '<table width="'.$breite.'%" align="'.$align.'" border="0" cellspacing="0" cellpadding="0">', $text);
		$text=eregi_replace(':/tb:', '</table>', $text);

	}

Nur läuft die while nur einmal über den Text und ersetzt dabei logischer weiser alle entsprechenden Textteile. Dabei sind aber $breite und $align eigentlich variabel.

Ziel ist es eigentlich das die Schleife immer sich erstmal eine Tabelle vornimmt und dann bei einem erneuten aufkommen die Variablen $breite und $align neu berechnet.

Ich seh wohl wieder den Wald vor lauter Bäumen nicht :suspekt:
Aber falls jemand etwas sieht (Fehler etc.) oder eine spontane Idee hat bitte posten.
 
Hab nun doch schonmal eine habwegs annehmbare Lösung für mein Problem gefunden.

PHP:
$text2=':tb::tbh::w=5:a=left:/tbh:<tr><td>Tabellentest</td></tr>:/tb:

		:tb::tbh::w=20:a=center:/tbh:<tr><td>Tabellentest2</td></tr>:/tb:

		:tb::tbh::w=30:a=right:/tbh:<tr><td>Tabellentest3</td></tr>:/tb:';
	
	while ((strpos($text2,":tbh:")!=false) && (strpos($text2,":/tbh:")!=false))
    {		
        $startpos_w	=strpos($text2,":tbh:")+5;
        $endpos_w	=strpos($text2,":a=",$startpos_w);
        $breite		=substr($text2,$startpos_w,$endpos_w-$startpos_w);
		
		$breite 	=eregi_replace(':w=', NULL, $breite);
		
		$startpos_a	=strpos($text2,":a=")+3;
        $endpos_a	=strpos($text2,":/tbh:",$startpos_a);
        $align		=substr($text2,$startpos_a,$endpos_a-$startpos_a);
		
		$align 		=eregi_replace(':a=', NULL, $align);		

				
		$text2   = preg_replace('(:tb::tbh::w=[0-9]{1,3}:a=[a-z]{1,6}:/tbh:)', '<table width="'.$breite.'%" align="'.$align.'" border="0" cellspacing="0" cellpadding="0">', $text2, 1);
		$text2	 = preg_replace(':/tb:', '</table>', $text2, 1);
		
	}
 
Zurück