[PHP] Reguläre Ausdrücke

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Smokers, 20. September 2007 .

Schlagworte:
  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?!
     
  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ß
     
  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??
     
  4. 2. Oktober 2007
    AW: Reguläre Ausdrücke

    zeit!

    2 mal regexen dauert halt länger als einmal...
     
  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 ^^
     
  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>
    .
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.