Webstatt.org - Community seit 2006 - 2012 (2024?)

Regex-Problem

Avatar user-168
14.05.2006 18:41

Da mein letzter Thread nicht sooooo super ausformuliert und wenig hilfreich war, fange ich hier nochmal grundlegend an.

<!-- ANFANG news -->
<table width="75%" class="rahmen">
<tr>
<td class="titelfeld">

{!titel}
</td>
</tr>
<tr>
<td>
Autor: {!autor} - ({!datum}) -
</td>
</tr>
<tr>
<td>

{!text}
</td>
</tr>
<tr>
<td>
{!link}
</td>
</tr>
</table><br>
<br>

<!-- ENDE news -->


Das ist der HTML Code im Template der Probleme macht. Folgender PHP-Code sollte das <!-- ... --> Zeugs eigentlich mit dem Inhalt drin zu {!news} editieren. Sobald aber das {!datum} geklammert wird, funktioniert das nicht mehr.
An Stellen wo der HTML-Code nicht ausgeschnitten wird um in später mehrfach wieder einzusetzen, passiert kein Fehler.
Allerdings wenn das Klammerproblem in so einem Codeblock auftritt, dann ersetzt er den Block nicht mehr.... Woran kann das liegen? Hier der entsprechende PHP-Code:

preg_match_all('#<!--\s*ANFANG\s*(\w*)\s*-->(.*)<!--\s*ENDE\s*(\\1)\s*-->#s',
$this->template,
$elemente);
for($i = 0; $i < count($elemente[1]); $i++){
$this->objekte[$elemente[1][$i]] = &new template($elemente[2][$i], '',2);
$this->objekte[$elemente[1][$i]]->vorlage($elemente[2][$i]);
$this->template = preg_replace('#<!--\s*ANFANG\s*'.$elemente[1][$i].'\s*-->'.$elemente[2][$i].'<!--\s*ENDE\s*'.$elemente[1][$i].'\s*-->#s',
'{!'.$elemente[1][$i].'}',
$this->template);
}


Wieso tritt so ein Fehler auf? Wieso bricht er das ausschneiden da einfach ab und lässt den Code wie oben in der direkten Form stehen?

Danke für alle hilfreichen Ideen. Und ich hoffe ich nerve nicht zu sehr damit. Fettes Grinsen

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-168
15.05.2006 13:50

Kann mir denn keiner helfen? traurig Das macht mich fertig. Wenn ich das nicht löse, war die ganze Arbeit für die Katz...

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-255
15.05.2006 18:06

Du musst die Regex-Sonderzeichen ($ ^ { [ ( | ) ] } * + ? \ ) escapen.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-168
15.05.2006 18:11

Aber im ersten Regex sind doch keine falschen Sonderzeichen mehr und im zweiten müsste es doch egal sein. Da wird die geschwungene Klammer doch nur eingefügt...

Ich glaube, ich muss das Tutorial schon wieder lesen. *arghs*

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-255
15.05.2006 18:15

In deinem Template tummeln sich aber einige Sonderzeichen..

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-343
15.05.2006 19:15

[dok]preg_quote[/dok]

Und damit die Sonderzeichenlastigen Strings maskieren lassen lächeln

Avatar user-168
16.05.2006 14:45

Original von user-255
In deinem Template tummeln sich aber einige Sonderzeichen..


Und damit hat RegEx Probleme? Das im RegEx selbst keine Sonderzeichen sein dürfen verstehe ich ja und es macht Sinn. Aber in dem Text, den er durchsuchen soll... Das ist doch irgendwie am Sinn vorbei, oder reden wir aneinander vorbei???

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-255
16.05.2006 14:56

Wenn ich das richtig sehe, wird $elemente[2][$i] ins Suchmuster eingebaut -- völlig unnötig und langsam in der Ausführung.
#<!-- ANFANG '.$elemente[1][$i].' -->.*?<!-- ENDE '.$elemente[1][$i].' -->#s

.. sollte reichen

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-168
16.05.2006 15:07

Perfekt. Vielen user-158k, user-255. Auch wegen der warscheinlich etwas sinnleeren und ahnungslosen Nachfragen.

Aber die Idee den Inhalt nicht aus dem Array zu nehmen, sondern neu suchen zu lassen, hat bestens funktioniert. Nun ist der Fehler weg. Fettes Grinsen

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche