reg Expr.
Frank
- php
1 dedlfix0 Christoph Schnauß0 Frank
Hallo liebe Leser,
habe mich jetzt ne halbe Stunde lang versucht, ein reg. Ausdruck
zu schreiben, nur leider ohne erfolg.
Das ist den Bereich, den ich haben möchte bzw. das zwischen START und ENDE.
<!-- START CONTENT -->
{ CONTENT }
<!-- ENDE CONTENT -->
Ich lese eine gesamte Datei mittels file_get_contents() ein,
und möchte dann mit Hilfe von preg_match { CONTENT } zurück bekommen.
Hab schon mehrere Variationen versucht.
Möchte mir ein template System schreiben, natürlich nur für die nötigsten Sachen. Vll. hat ja jetzt schonmal jemand Verbesserungen anzubieten.
Falls mir jmd. den Tip geben möchte, das ich Smarty oder andere Tmpl. Systeme nutzen soll, kann den Kommentar gerne für sich behalten.
Wäre dankbar, wenn mir jmd bei dem Reg. Ausdruck helfen könnte.
mfg
Frank
echo $begrüßung;
<!-- START CONTENT -->
{ CONTENT }
<!-- ENDE CONTENT -->
Ich lese eine gesamte Datei mittels file_get_contents() ein, und möchte dann mit Hilfe von preg_match { CONTENT } zurück bekommen.
Schau dir mal HTML_Template_IT aus PEAR an, die verwenden fast die gleiche Syntax wie du. Deren Lösung sollte sich auch auf dein Problem anwenden/anpassen lassen.
echo "$verabschiedung $name";
hallo,
Ich lese eine gesamte Datei mittels file_get_contents() ein,
und möchte dann mit Hilfe von preg_match { CONTENT } zurück bekommen.
file_get_contents() liest die angegebene Ressource in einen String ein, was für dein Vorhaben eigentlich maßgeschneidert ist. Aber du müßtest schon genauer beschreiben, was du dann ausgeben lassen möchtest.
Wäre dankbar, wenn mir jmd bei dem Reg. Ausdruck helfen könnte.
Bei welchem denn? Du müßtest schon deinen bisherigen Ansatz mitposten, sonst suche ich eventuell nach "lepistes reticulata" in deinem String und wundere mich, wenn dann nichts paßt ...
Grüße aus Berlin
Christoph S.
hallo,
meine Ansätze waren bisher folgende:
$sMuster = "/<!--\sSTART\sCONTENT\s-->(.*)<!--\sENDE\sCONTENT\s-->/m";
außerdem noch:
$sMuster = "/<!--\sSTART\sCONTENT\s-->(.*)<!--\sENDE\sCONTENT\s-->/";
nur leider bekomme ich immer ein leeres Array von preg_match zurück.
hab kein plan wieso es mit keinen von beiden Varianten funktioniert.
will am ende ja "{ CONTENT }" als Arrayelement bekommen.
kann mir jmd sagen, was ich falsch mache ?
wäre euch sehr dankbar.
mfg
Frank
hallo,
meine Ansätze waren bisher folgende:
$sMuster = "/<!--\sSTART\sCONTENT\s-->(.*)<!--\sENDE\sCONTENT\s-->/m";
außerdem noch:
$sMuster = "/<!--\sSTART\sCONTENT\s-->(.*)<!--\sENDE\sCONTENT\s-->/";
Da ist nicht zu verstehen, was du eigentlich möchtest.
nur leider bekomme ich immer ein leeres Array von preg_match zurück.
Klar. Du suchst ja nur nach bereits in der eingelesenen Datei vorhandenen HTML-Kommentaren. Wenn da keinerlei Kommentare drinstehen, kriegst du eben auch nichts zurück. Was willst du dir denn nun als "Content" ausgeben lassen?
Grüße aus Berlin
Christoph S.
hi,
ich fang nochmal von vorne an.
so sieht meine html datei aus, sprich meine template datei ( auszug )
[code=html]
<html>
tabellen, divs <- alles html-kram
...
<!-- START CONTENT -->
{ CONTENT }
<!-- ENDE CONTENT -->
...
tabellen, divs <- alles html-kram
</html>
[/code]
so, oben hab ich nun 2 html kommentare. nun möchte ich nur das zwischen den beiden kommentaren mittels preg_match "auslesen", so dass ich anschließend in meinem Array[1] = "{ CONTENT }" stehen habe.
Um es nochmal klar auszudrücken, ich will { CONTENT } haben, und nicht die Kommentare.
Meine Ansätze sind ja bekannt. Hoffe es war nun verständlich, weil besser kann ich es nicht mehr erklären.
mfg
Frank
hallo,
so sieht meine html datei aus, sprich meine template datei ( auszug )
Entschuldige, es wäre eventuell besser, wenn du als Beispiel eine ganz kleine tatsächlich verwendete Datei angeben wolltest.
Ich habe, wenn ich mirs genau anschaue, den Eindruck, daß du die Zeilenumbrüche vergessen hast, die es höchstwahrscheinlich in deinem
{ CONTENT }
gibt. Vielleicht hilft es, das Muster
"/([\r\n])[\s]+/";
erstmal mit preg_replace() zu entfernen.
Um es nochmal klar auszudrücken, ich will { CONTENT } haben, und nicht die Kommentare.
Um es nochmal klar ausudrücken: was willst du denn mit "(CONTENT)" anstellen? Soll das dann ausgegeben oder abgespeichert oder irgendwie weiterverarbeitet werden?
Meine Ansätze sind ja bekannt.
Bekannt ist beispielsweise
$sMuster = "/<!--\sSTART\sCONTENT\s-->(.*)<!--\sENDE\sCONTENT\s-->/";
Darin sind die "s" wahrscheinlich überflüssig, und die "" wahrscheinlich auch. Was übrig bleibt, könnte also
$sMuster = "/<!--START CONTENT-->(.*)<!--ENDE CONTENT-->/";
sein. Und da siehst du doch sofort selbst, daß darin keinerlei Zeilenumbrüche enthalten sind. Nach deiner Vorgabe steht in der eingelesenen HTML-Datei aber
<!--START CONTENT-->
*
*
*
*
<!--ENDE CONTENT-->
Das heißt, bereits hinter <!--START CONTENT--> gibts den ersten Umbruch, und den hast du nicht abgefangen. Die Folge: dein "Ausdruck" paßt nirgends, und dein Script gibt dir folgerichtig einen leeren Array zurück.
Grüße aus Berlin
Christoph S.