Enrico: Problem beim Zusammensetzen eines regulären Ausdrucks

Hallo,

ich möchte innerhalb eines regulären Ausdrucks beliebige Zeichen in beliebiger Anzahl bis zur schliessenden geschweiften Klammer abgreifen.

Der Punkt (.) steht für ein einziges beliebiges Zeichen. Der Stern (*) für die Anzahl "keines", "eines" oder "beliebig viele". Durch die Kombination ".*" bekomme ich also beliebige Zeichen in beliebiger Anzahl.

Wie kann ich aber nun den Stern anweisen, nur bis zur schliessenden geschweiften Klammer zu gehen?

Über ".*^}" funktioniert es schon mal nicht, dies setzt mir den kompletten regulären Ausdruck außer Kraft.

Gruß,
Enrico

  1. Hi,

    Über ".*^}" funktioniert es schon mal nicht, dies setzt mir den kompletten regulären Ausdruck außer Kraft.

    übe doch ein wenig mit dem Regex Coach. Ich gehe mal davon aus, dass du Windows-User bist? Ansonsten gibts das Programm auch für Linux, allerdings nur noch in älteren Versionen.

    1. Hallo,

      ja, ich bin Windows-User.

      Testen tue ich meine regulären Ausdrücke online auf www.regexe.de.

      Das Austesten hat mir schon viel geholfen, aber hier hänge ich eben noch.

      Gruß,
      Enrico

  2. Hi,

    ich möchte innerhalb eines regulären Ausdrucks beliebige Zeichen in beliebiger Anzahl bis zur schliessenden geschweiften Klammer abgreifen.
    Der Punkt (.) ...

    ... ist dann also ungünstig, denn er würde ja auch auf die schließende Klammer zutreffen. Du willst also nicht "beliebige Zeichen", sondern "alle Zeichen außer '}', und das beliebig oft:

    /[^}]*/

    Dieser Ausdruck findet genau das: Eine beliebige Anzahl Zeichen, die alles außer der schließenden geschweiften Klammer sein können.

    Durch die Kombination ".*" bekomme ich also beliebige Zeichen in beliebiger Anzahl.

    Eben, und dadurch rennst du auch über die Klammer hinweg.

    Ciao,
     Martin

    --
    Es sagte...
    ein korpulenter Lehrer zu einem Schüler, der ihn ein Fass genannt hatte: "Nein. Ein Fass ist von Reifen umgeben, ich dagegen von Unreifen."
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin,

      /[^}]*/

      Das ist genial! Da wäre ich so schnell nicht drauf gekommen.

      Danke vielmals!

      Gruß,
      Enrico

    2. Tach!

      ich möchte innerhalb eines regulären Ausdrucks beliebige Zeichen in beliebiger Anzahl bis zur schliessenden geschweiften Klammer abgreifen.
      Der Punkt (.) ...
      ... ist dann also ungünstig, denn er würde ja auch auf die schließende Klammer zutreffen.

      Im Prinzip ja, und Regexen sind gierig, aber nur solange wie sie ein Ergebnis liefern können. Das Muster /(.*)}/ findet alles, auch solche Klammernzeichen, aber an der letzten Klammer macht es Halt, weil es trotz der Gierigkeit ja auch noch den Ausdruck zu erfüllen gilt. Mit U-Modifizierer ist schon an der ersten Klammer das Ergebnis erreicht. (Die Gruppierung braucht man nur, wenn man den Ausdruck ohne Klammer extrahieren will.)

      Du willst also nicht "beliebige Zeichen", sondern "alle Zeichen außer '}', und das beliebig oft:
      /[^}]*/

      Das ist eine gängige Methode, um die Gierigkeit auf anderem Wege zu umgehen. Und man muss nicht gruppieren, wenn man den Teil exklusive der Klammer haben will.

      Durch die Kombination ".*" bekomme ich also beliebige Zeichen in beliebiger Anzahl.
      Eben, und dadurch rennst du auch über die Klammer hinweg.

      Nö, nicht zwangsläufig.

      dedlfix.