Ich versuche gerade mein eigenes kleines Wiki in PHP zu schreiben. Die Beispiele für reguläre Ausdrücke sind super, daher hatte ich mich entschieden RegExp auch in meinem Projekt zu verwenden.
Jetzt hänge ich hier an dem Problem Tabellen zu parsen. Die Syntax hat zwei Varianten und sie sehen wie folgt aus:
Variante 1:
Variante 2:
Die Parameter in den Varianten 1 und Variante 2 (z.B. 'color="#FF0000"') sind optinal, aber ich will sie für die Gestaltung der Tabellen auswerten.
Mein Problem ist, wie erstelle ich den regulären Ausdruck am besten und wie schaffe ich es, dass ich die 2. Variante korrekt erkenne?
Meine Lösung basiert auf einem Lösungsvorschlag aus dem Thread Wiki und Listen von Luke und bisher habe ich ihn nicht korrekt anpassen können.
Ich wäre sehr dankbar dafür, wenn mir jemand einen Tip geben könnte oder helfen würde.
Vielen Dank schon mal im Voraus.
P.S.: Eine komplette Übersicht über die Wikisyntax kann man unter Wikisyntax finden.
Jetzt hänge ich hier an dem Problem Tabellen zu parsen. Die Syntax hat zwei Varianten und sie sehen wie folgt aus:
Variante 1:
{| border="1" cellspacing="5px" cellpadding="0px"
|Zelle 1
|Zelle 2
|-
|Zelle 3
|Zelle 4
|}
|Zelle 1
|Zelle 2
|-
|Zelle 3
|Zelle 4
|}
{| border="1" cellspacing="5px" cellpadding="0px"
|Alpha || Beta || Gamma
|----
|Delta || Epsilon || Zeta
|}
|Alpha || Beta || Gamma
|----
|Delta || Epsilon || Zeta
|}
Mein Problem ist, wie erstelle ich den regulären Ausdruck am besten und wie schaffe ich es, dass ich die 2. Variante korrekt erkenne?
Meine Lösung basiert auf einem Lösungsvorschlag aus dem Thread Wiki und Listen von Luke und bisher habe ich ihn nicht korrekt anpassen können.
PHP-Code:
function find_table($string)
{
$table_string = preg_replace("/\n(\{\|(-\n|\|.*)\|\})\n/Use", "<table>\n\t<tr>\$this->do_table('\\2') \t</tr></table>\n", $string);
return table_string;
}
function do_table($string)
{
$string = preg_replace("/\|([^\n]*)\n/", "\\1", $string);
$string = preg_replace("-\n","\t</tr>\n\t<tr>\n",$string);
if ($string== "\t</tr>\n\t<tr>\n")
return $string;
return "\n<td>".$string."</td>".$s;
}
Vielen Dank schon mal im Voraus.
P.S.: Eine komplette Übersicht über die Wikisyntax kann man unter Wikisyntax finden.
Kommentar