Reg. Ausdr.: Einfache Codesprache mit optionalen Parametern

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Reg. Ausdr.: Einfache Codesprache mit optionalen Parametern

Beitrag 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
Wo kann ich denn den Text für die Signatur eintippen? *wunder*
mithra
Mitglied
Beiträge: 31
Registriert: 15.03.2008 11:02

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

Beitrag von mithra »

Kennst Du das schon?
Table BBCode
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag 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.
Wo kann ich denn den Text für die Signatur eintippen? *wunder*
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

/#zelle((?: hell| dunkel| links| mitte| rechts)*)#/
KB:knigge
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag 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"'?
Wo kann ich denn den Text für die Signatur eintippen? *wunder*
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“