Seite 1 von 1

Reg. Ausdr.: Einfache Codesprache mit optionalen Parametern

Verfasst: 24.03.2008 13:38
von smaugilein
Frohe Ostern! :-)

Ich wusel mich seit einiger Zeit durch diverse Anleitungen und Manuals für Reguläre Ausdrücke, aber entweder habe ich die alle nicht richtig verstanden oder es stand wirklich nicht drin! ;-)
Ich möchte nämlich eine kleine, einfache Codesprache "erfinden", die es Benutzern ermöglicht, Tabellen anzulegen.
Dabei benutze ich den preg_replace-Befehl, um folgendes umzuwandeln:

#TABELLE#(.*?)#ENDE# --> <table...><tr>\\1</tr></table>

#NEUE\ ZEILE# --> </tr><tr>

#ZELLE#(.*?)#ENDE# --> <td>\\1</td>

und

#ZELLE\ VERBINDE\ (.)#(.*?)#ENDE# --> <td colspan="\\1">\\2</td>

Eine Tabelle kann dann z.B. so aussehen:

Code: Alles auswählen

#TABELLE#
      #ZELLE VERBINDE 2#
            Überschrift
      #ENDE#
#NEUE ZEILE#
      #ZELLE#
            Dies ist eine Zelle
      #ENDE#
      #ZELLE#
            Dies die zweite
      #ENDE#
#ENDE#
Das funktioniert ganz wunderbar, jedoch möchte ich die Zellen auch etwas "aufhübschen", durch optionale Parameter wie z.B. "HELL", "RECHTS", "MITTIG" etc., also z.B.

#ZELLE HELL RECHTS#....#ENDE'

Sicherlich könnte ich für jeden Fall (ZELLE HELL RECHTS, ZELLE RECHTS HELL, ZELLE HELL, ZELLE DUNKEL, ZELLE DUNKEL MITTIG, ...) eine eigene preg_replace-Zeile schreiben - aber das muss doch mit regulären Ausdrücken einfacher gehen? Also z.B.

#ZELLE(ist HELL angegeben?)(ist DUNKEL angegeben?)(ist RECHTS angegeben?)#(.*?)#ENDE#

und dass dann HELL in ' class="row1"', DUNKEL in ' class="row2"', RECHTS in ' align="right"' (oder wahlweise ' style="text-align:right"' ;-)) umgewandelt wird...

Kleiner Tipp? Ganzer Ausdruck? :-D

Re: Reg. Ausdr.: Einfache Codesprache mit optionalen Paramet

Verfasst: 24.03.2008 15:35
von mithra
Kennst Du das schon?
Table BBCode

Verfasst: 24.03.2008 15:42
von smaugilein
Danke für den Link! Hab grad ma reingeschaut - da sind aber alle Fälle einzeln aufgeführt. Beispiel:

Code: Alles auswählen

	// mainrow tag [mrow], along with attributes
	[...]
	$text = preg_replace("/\[mrow color=(\#[0-9A-F]{6}|[a-z]+):$uid\]/si", $bbcode_tpl['table_mainrow_color'], $text);
	$text = preg_replace("/\[mrow fontsize=([1-2]?[0-9]):$uid\]/si", $bbcode_tpl['table_mainrow_size'], $text);
	$text = preg_replace("/\[mrow color=(\#[0-9A-F]{6}|[a-z]+) fontsize=([1-2]?[0-9]):$uid\]/si", $bbcode_tpl['table_mainrow_cs1'], $text);
Hier kann "mrow" das Attribut "color", "fontsize" oder beide zusammen haben. Jeder Fall wird aber einzeln aufgeführt. Wenn beide zusammen auftreten, muss aber "color" vor "fontsize" stehen. Das ist aber erstens unschön und zweitens nicht das, was ich möchte. Es geht ja wirklich um den Code für den Regulären Ausdruck.

Verfasst: 24.03.2008 16:02
von S2B
Du könntest höchstens mit dem e-Modifier arbeiten und das Ergebnis direkt per PHP auswerten, wobei man hier vermehrt auf die Sicherheit schauen sollte. Von guter Lesbarkeit kann man dann aber wahrscheinlich nicht mehr sprechen... :wink:

Verfasst: 24.03.2008 16:09
von Pyramide

Code: Alles auswählen

/#zelle((?: hell| dunkel| links| mitte| rechts)*)#/

Verfasst: 24.03.2008 16:19
von smaugilein
Pyramide hat geschrieben:

Code: Alles auswählen

/#zelle((?: hell| dunkel| links| mitte| rechts)*)#/
Klingt gut! Und wie ersetze ich dann z.B. 'hell' mit ' class="row1"'?

Verfasst: 24.03.2008 16:55
von gn#36
Das einfachste ist eigentlich ein zweistufiges vorgehen:
Im ersten Schritt prüfen, ob die Syntax korrekt ist, die korrekten markieren ([php:preg_replace]), im zweiten dann die eigentliche Ersetzung. Siehe auch KB:bbcode_uid