#1 20. September 2007 Reguläre Ausdrücke Habe in folgende Funktion ein Problem. die Funktion: PHP: #$text = preg_replace('/\[TABELLE=([[:alnum:]]{1}?).*\](.*?)\[\/TABELLE\]/', '<table border="$1">$2</table>', $text);#Tabelle $text = preg_replace ( '/\[TABELLE\](.*?)\[\/TABELLE\]/' , '<table>$1</table>' , $text ); #Tabelle $text = preg_replace ( '/\[ZEILE\](.*?)\[\/ZEILE\]/' , '<tr>$1</tr>' , $text ); #tr $text = preg_replace ( '/\[SPALTE\](.*?)\[\/SPALTE\]/' , '<td>$1</td>' , $text ); #td das auskommentierte Funktioniert nicht. Ich will den Rahmen als 2ten Parameter übergeben sodass man im BBCode selber festlegen kann welche Rahmenstärke man hat. Wenn ich es jedoch in der auskommentierten Variante schreibe passiert nichts.... das <table> und </table> wird zwar umgesetzt aber die TRs und TDs nichtmehr. der BBCode dazu sieht so aus : Code: [MITTIG] [TABELLE] [ZEILE][SPALTE]geschichtentext.....[/SPALTE][SPALTE]lol[/SPALTE][/ZEILE] [ZEILE][SPALTE]geschichtentext2.....[/SPALTE][SPALTE]lol2[/SPALTE][/ZEILE] [ZEILE][SPALTE]geschichtentext3.....[/SPALTE][SPALTE]lol3[/SPALTE][/ZEILE] [/TABELLE] [/MITTIG] so mit der nicht auskommentierten variante kommt folgender HTML text bei raus : Code: <span style="float:center;"> <br /><table> <br /><tr><td>geschichtentext.....</td><td>lol</td></tr> <br /><tr><td>geschichtentext2.....</td><td>lol2</td></tr> <br /><tr><td>geschichtentext3.....</td><td>lol3</td></tr> <br /></table></span> Das ist auch richtig, mit der auskommentierten Variante : Code: <span style="float:center;"> <br /><table border="1"> <br /></table> <br /></span> Woran liegt das ? und wie kann ich es beheben...? und als Zusatzfrage ... wie bekomme ich es hin das die Tabelle auch zentriert wird( das passiert nämlich mit dem <span style="float:center;"> nicht?! + Multi-Zitat Zitieren
#2 1. Oktober 2007 AW: Reguläre Ausdrücke Hi, naja, so würde der erste Ausdruck ja allgemein zu keinem Match führen, da dafür hinter TABELLE ein Gleichheitszeichen und eine einstellige Zahl stehen müssten. Wenn dies der Fall ist (und du hast es im Beispiel nur vergessen), dann musst du nur den nächsten quantifier non-greedy machen: PHP: $text = preg_replace ( '/\[TABELLE=([[:alnum:]]{1}?).*?\](.*?)\[\/TABELLE\]/' , '<table border="$1">$2</table>' , $text ); #Tabelle dann klappt es! Um die Tabelle mittig auf einer Seite auszurichten gibt's ein paar Möglichkeiten, die sind allerdings meist nur bedingt elegant z.B. HTML: <table style="margin: 0 auto;"> aber dafür kannst du auch mal google bemühen ^^ Schönen Gruß + Multi-Zitat Zitieren
#3 1. Oktober 2007 AW: Reguläre Ausdrücke oder mach doch einfach 2 preg_replace: Code: $text = preg_replace('/\[TABELLE\]/', '<table>', $text); $text = preg_replace('/\[/TABELLE\]/', '</table>', $text); oder was spricht dagegen?? + Multi-Zitat Zitieren
#4 2. Oktober 2007 AW: Reguläre Ausdrücke zeit! 2 mal regexen dauert halt länger als einmal... + Multi-Zitat Zitieren
#5 2. Oktober 2007 AW: Reguläre Ausdrücke und wenn man es als array preg_replace macht? Code: $suchen = array("\[TABELLE\]", "\[/TABELLE\]"); $ersetzen = array("<table>", "</table>"); $text = preg_replace($suchen, $ersetzen, $text); kenn halt den algorithmus nicht. aber könnte mir vorstellen. das es so schneller geht als 2 preg_replace. ist aber nur ein vorschlag ^^ + Multi-Zitat Zitieren
#6 4. Oktober 2007 AW: Reguläre Ausdrücke wenn ich mir das anschauen, währe es auch mit reiner html-code übersichtlicher und kürzer . ich würde empfehlen einen text-editor mit javascript und tabellen-zeichen-funktion basteln. dann beim abspeichern die html-tabelle in einen block setzen z.b <html> . + Multi-Zitat Zitieren