Inhalt zwischen zwei Markern auslesen

SEK1989

Grünschnabel
Hallo,
ich würde gern aus einer HTML-Datei den Inhalt zwischen 2 Markern auslesen und diese dann in eine Variable speichern, die den Namen des Markers hat.

Beispiel:
HTML-Datei:
HTML:
<body>
<!-- marker -->Das ist der Inhalt<!-- marker -->
</body>

PHP:
Mit PHP soll "Das ist der Inhalt" ausgelesen werden und
 in der Variable "marker" gespeichert werden. Die Variable soll
also immer den Namen des Markers haben.

Habe schon gesucht :google: aber leider nichts gefunden;-].

Vielen Dank im Voraus
 
Die Lösung ist relativ einfach, von daher gebe ich dir lieber einige Anstöße zum Lernen und Lösen:

Es gibt Reguläre Ausdrücke die sind zum einen bei Wikipedia sehr schön beschrieben und zum anderen hast du hier eine Seite zum ausprobieren, die auch einiges erklärt:
http://regexp-evaluator.de/evaluator/

Probier einfach mal folgenden Ausdruck auf deinen "Quelltext":
Code:
<!-- ([\w]+) -->
und schau was gefunden wird ;)

Zudem kannst du variable Variablen in PHP setzen (doppeltes $), das brauchst du dann im nächsten Schritt:
PHP:
$arr[0] = "foo";
$arr[1] = "bar";

$$arr[0] = $arr[1];  // Das ist wie $foo = "bar";
echo $foo;

Probier mal und zeig uns deine Fortschritte ;)
 
Du hast mehrere Möglichkeiten: Manuell mittels strpos():
PHP:
if (($start = strpos($str, '<!-- marker -->')) !== false && ($end = strpos($str, '<!-- marker -->', $start)) !== false) {
    $match = substr($str, $start, $end);
}
Oder mittels einem regulären Ausdrucks:
PHP:
preg_match('/<!-- marker -->(.*?)<!-- marker -->/', $str, $match)
Durch den lazy Ausdruck .*? ist der reguläre Ausdruck aber nicht sehr effizient, da jedes mal geprüft werden muss, ob nicht schon das Ende erreicht wurde. Besser ist da vielleicht:
Code:
/<!-- marker -->((?:[^<]+|<(?:[^!]|!(?!-- marker -->)))*)<!-- marker -->/
 
Also schonmal jetzt vielen Dank. Die erste Variante sieht etwas komplexer aus (ist wahrscheinlich total einfach). Ich melde mich wieder mit meinem Ergebniss danke!
 
Das erste habe ich schon fast durchblickt. Ein paar Fragen hätte ich aber schon noch da zu.

Den Code den ich bis jetzt habe:
PHP:
<?PHP
//
// Text, der durchsucht werden soll
//
$subject = '<!-- TEST -->Der Hund schläft in der Maschine<!-- TEST --> - immernoch ...';
//
// Der Reguläre Ausdruck
//
$pattern = '#<!-- ([\w]+) -->(.*)<!-- ([\w]+) -->#is';
//
// RegExp auswerten
//
$result = preg_match($pattern, $subject, $subpattern);
//
// Ergebnis ausgeben
//
echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
(($result) ? '' : 'nicht ').'zu.</p>';
//
// Unterausdrücke ausgeben
//
echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
?>

Folgendes wird ausgegeben:
Code:
Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text zu.

Array
(
[0] => Der Hund schläft in der Maschine
[1] => TEST
[2] => Der Hund schläft in der Maschine
[3] => TEST
)

Frage 1: Ich finde es zwar äuserst nützlich das man mit
PHP:
<!-- ([\w]+) -->
Den Marker auslesen kann, mir bleibt jetzt nur noch die Frage wie das funktioniert. Also was der Begriff genau zu bedeuten hat.
Frage 2: Wie man an der Ausgabe sieht gibt er Marker und Text 2x aus. Kann man das auch verhindern?
Frage 3: Wie würde es aussehen wenn ich verschiedene Marker im Text hätte, ist das möglich?

Dank schonmal habt mir schon sehr viel geholfen!
 
Das ganze geht um ein Schulprojekt. Ich suche momentan lösungen ohne MySQL da wir bei dem Projekt kein MySQL nutzen können... So suchte ich alternativen. Klar ich hätte auch einfach mit ner einfachen Include machen da hätte ich aber den nachteil, dass die zu includende datei bei der bearbeitung nicht die ganzen css sachen anzeigt und wenn habe ich später den zb. den body tag doppel. so dachte ich ich versuche es mal mit markern vor allem das thema interessierte mich auch so.....
 
Und dann versuchst du so etwas kompliziertes? Wenn ihr nicht MySQL verwenden könnt, dann vielleicht SQLite. Oder du wählst ein eigenes Datenformat (beispielsweise CSV) und speicherst die Daten in Dateien.
 
Zurück