Carsten: reguläre Ausdrücke

Beitrag lesen

Hallo Rico!

Welchen regulären Ausdruck muss man in PHP benutzen um alle Zeichen(auch Sonderzeichen und HTML Tags) die zwischen <!--start--> und <!--ende--> stehen auszulesen.

preg_match("=<!--start-->([^*]*)<!--ende-->=i",$datei,$ausgabe);

das [^*] passt auf alles ausser das '*', das ist wohl eher nicht das, was du willst, denn das funktioniert nur solange kein * in dem Text zwischen Start und Ende vorkommt.

<!--start-->Hier steht ein <b>Text mit HTML</b> drin <!--ende-->

klappt ganz Prima, aber

<!--start-->Hier steht ein <b>Text mit *Sternchen*</b> drin <!--ende-->

klappt nicht. Der Ausdruck wird nicht 'matchen' da  für '*Sternchen*</b> ' nix passendes drinsteht.

Der passende Ausdruck ist einfach, braucht aber einen 'modifier'
preg_match("=<!--start-->(.*)<!--ende-->=si",$datei,$ausgabe);
                                         ^
Der sagt, das der Punkt auf alle Zeichen, auch Zeilenumbrüche passen soll. http://www.php.net/manual/de/pcre.pattern.modifiers.php

So, und jetzt kommt gleich der nächst Haken:
$datei="<!--start-->Der erste Text <!--ende--> was anderes <!--start-->der zweite Bereich<!--ende-->"

Da passt der Ausdruck auf alles, d.h. im geklammerten Bereich (.*) steht: 'Der erste Text <!--ende--> was anderes <!--start-->der zweite Bereich'. Das (.*) nimmt nämlich so viele Zeichen wie möglich (Das nennt man gierig (greedy)). Wenn du das nicht willst musst du (.*?) schreiben.

Den eingeklammerten Text kannst du mit
 echo $ausgabe[1];
anzeigen lassen, in $ausgabe[0] steht der ganze passende (gematchte) Teil.

So, und jetzt viel Spass beim weitertüfteln.

Gruss,
Carsten