sunflowa: preg_match / regex für schweiklammern

Hallo!

Folgendes Problem:
Ich möchte mit preg_match einen bestimten Bereich auslesen, der durch Schweifklammern begrenzt wird:

{bla}
Das möchte ich auslesen
{bla}

bla soll eine Variable darstellen.
Der Inhalt ist beliebig.
Die Schweifklammern sollten am besten auch per Variable eingefügt werden, da ich eventuell das ganze noch so brauche:

{{bla}
Das möchte ich auslesen
{bla}}

Ich weiss leider nicht, wie ich einen passenden Suchauftrag für preg_match formulieren kann.
Hab es schon mehrfach versucht.

Grüsse...

  1. Hallo, sunflowa!

    Deine Syntax ist nicht wirklich für eine einzele Regular Expression geeignet. Wenn Du ein Problem hast und unreflektiert sagst "ich kann Regular Expressions", ergeben sich daraus meistens zwei Probleme.

    Außerdem ist Deine Syntax insofern unpraktisch, als dass sie die Blöcke nicht sauber schließt, d.h. das Close Tag ist gleich dem Open Tag - damit forderst Du Verwechslungen geradezu heraus.

    Schließlich solltest Du Dir überlegen, was Du mit Deiner Syntax eigentlich erreichen willst. Für mich sieht das so aus, als wolltest Du eine komplexe Template-Engine in PHP schreiben. Davon gibt es allerdings schon einige, so dass man sich die Arbeit durchaus sparen kann.

    Ansonsten nur folgender Rat: Du brauchst keine Regexp, sondern einen Parser.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Meinetwegen nehmen wir den zweiten Vorschlag, dann ham ma Tags.
      Nein, eine komplexe Template-Engine will ich nicht schreiben, ich brauche für ein Projekt eine kleine Template-Klasse mit nen bisschen weniger Code, so um 100 Zeilen.
      Ja, die Arbeit kann man sich sparen aber Smarty und Co sind nicht erwünscht und ich muss mir halt selber was zusammenbasteln.
      Und das finde ich auch nicht schlimm schlissslich kann man sein Wissenstand ja ausbauen

      Ansonsten nur folgender Rat: Du brauchst keine Regexp, sondern einen Parser.

      Öhhm, was bringt mir nen Parser :-D
      Du kannst wahrscheinlich "auch" nicht wirklich regexen, ich weiss schon was ich will

      1. Hallo, sunflowa!

        Meinetwegen nehmen wir den zweiten Vorschlag, dann ham ma Tags.
        Nein, eine komplexe Template-Engine will ich nicht schreiben, ich brauche für ein Projekt eine kleine Template-Klasse mit nen bisschen weniger Code, so um 100 Zeilen.
        Ja, die Arbeit kann man sich sparen aber Smarty und Co sind nicht erwünscht und ich muss mir halt selber was zusammenbasteln.
        Und das finde ich auch nicht schlimm schlissslich kann man sein Wissenstand ja ausbauen

        Ansonsten nur folgender Rat: Du brauchst keine Regexp, sondern einen Parser.
        Öhhm, was bringt mir nen Parser :-D
        Du kannst wahrscheinlich "auch" nicht wirklich regexen, ich weiss schon was ich will

        Ich kann schon mit RegExp umgehen, dazu gehört aber auch, zu wissen, wann man sie besser nicht verwendet. Ein Parser ist ein Programm, welches Daten anhand eines Vokabulars erfaßt, bspw. '1 + 1' als Addition zweier Werte erkennt und daraufhin reagiert. Man kann einen Parser auch mit Regexp realisieren, schränkt sich dabei in der Regel aber ziemlich ein.

        Das Problem Deiner Absicht besteht darin, dass Du die Ausdrücke, nach denen Du suchst, kapseln willst. An dieser Stelle steigen Regexp üblicherweise aus. Ich habe Dir ein Vorgehen genannt, mit dem Du weiterkommen würdest, wenn Du es implementierst. Wenn nicht, versuche Dich eben weiter an einer Regexp. Den ersten von Dir genannten Fall kannst Du als Regepx mit "/{([^}]+)}([^{]+){([^}]+)}/" ausdrücken (Wert 1,3 = Variable, Wert 2 = Inhalt). Der zweite Fall wird so aber nicht funktionieren.

        Gruß, LX

        --
        X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: Unusual
        X-Please-Search-Archive-First: Absolutely Yes
        1. aber ne parser macht doch dasselbe
          schau dir doch andere template-klassen an