reguläre Ausdrücke
Rico
- php
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);
Mit ([^*]*) geht es so weit, dass alle zeichen außer der Stern ausgelesen werden. Ich weiß schon das mit ^ Zeichen ausgeschlossen werden.
Gruss ~ Rico;-)
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
Vielen Dank Carsten, es funktioniert!!!
Gruss ~ Rico;-)