Rico: reguläre Ausdrücke

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;-)

  1. 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

    1. Vielen Dank Carsten, es funktioniert!!!

      Gruss ~ Rico;-)