löffel: RegEx: alle Treffer auflisten

Hallo,
wie kann ich ein Regex bauen, dass alle Treffer einzeln auflistet?
Habe zB einen Text:
ergebnis = zahl1 + zahl2 - zahl3 * zahl4      oder
ergebnis = wert25- zahl7

als Ergebnis brauche ich dann jede "Variable" und jedes Zeichen extra aufgelistet.
Im ersten Beispel bräuchte ich folgende Treffer:
 - ergebnis
 - =
 - zahl1
 - +
 - zahl2
 - -
 - zahl3
 - *
 - zahl4

Welche Einstellungen brauche Ich da im Regex?
mein aktuelles würde nur finden:
 - ergebnis
 - =
 - zahl1
 - *
 - zahl4

Weiß jemand weiter?

  1. Weiß jemand weiter?

    preg_split() und als Suchmuster für das Trennzeichen nimmst du die Zeichen der vier Spezies sowie das Gleichheitszeichen.

    Problem solved.

    1. @@suit:

      nuqneH

      preg_split() […] Problem solved.

      Leute gibt’s …

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. preg_split() […] Problem solved.

        Leute gibt’s …

        In diesem Fall sind PCRE aber sehr praktisch und das Problem ist trivial. Mit Stringfunktionen wäre dasselbe imho ungleich komplizierter.

    2. Hi!

      Weiß jemand weiter?
      preg_split() und als Suchmuster für das Trennzeichen nimmst du die Zeichen der vier Spezies sowie das Gleichheitszeichen.
      Problem solved.

      Wirklich? Für mich las sich das so, als ob er keinen Verlust durch Trennzeichen haben wollte, weswegen ich eine Gruppierung vorschlüge. Die müsste die Variablen (oder was auch immer) oder ein Zeichen aus =+-*/ abdecken und darf sich beliebig wiederholen.

      Lo!

      1. Weiß jemand weiter?
        preg_split() und als Suchmuster für das Trennzeichen nimmst du die Zeichen der vier Spezies sowie das Gleichheitszeichen.
        Problem solved.

        Wirklich? Für mich las sich das so, als ob er keinen Verlust durch Trennzeichen haben wollte, weswegen ich eine Gruppierung vorschlüge. Die müsste die Variablen (oder was auch immer) oder ein Zeichen aus =+-*/ abdecken und darf sich beliebig wiederholen.

        Wenn du mit preg_match() arbeitest ja, aber warum preg_match() anwerfen wenn man mit preg_split() arbeiten kann?

        Die Zeichen =+-*/ reichen dann vollig aus und man braucht kein zusätzliches Muster definieren, welches zu den Variablen passt da sich das ohnehin durch die Trennzeichen ergibt. Und ich gehe Stark davon aus, dass diese fünf Zeichen nicht in den Variablen vorkommen.

        1. Hi!

          Wenn du mit preg_match() arbeitest ja, aber warum preg_match() anwerfen wenn man mit preg_split() arbeiten kann?
          Die Zeichen =+-*/ reichen dann vollig aus und man braucht kein zusätzliches Muster definieren, welches zu den Variablen passt da sich das ohnehin durch die Trennzeichen ergibt.

          explode() zum Beispiel wirft die Trennzeichen weg. preg_split() übernimmt sie eigentlich auch nicht in das Ergebnis. Aber - wie ich grad nachlas - gibt es das Flag PREG_SPLIT_DELIM_CAPTURE, mit dem sie doch erhalten bleiben, wenn sie im Suchmuster geklammert werden.

          Und ich gehe Stark davon aus, dass diese fünf Zeichen nicht in den Variablen vorkommen.

          Das ginge auch nicht, denn dann könnte man sie ohne weitere Maßnahmen (wie Quotieren der Bezeichner) nicht von den Operatoren unterscheiden.

          Lo!

  2. Hello,

    unter Einbezug aller bisherigen Tipps:
    was ist mit

    ergebnis = Zahl1 * 7 + zahl2 * (-zahl3)

    Hast Du das auch berücksichtigt?

    Willst Du einen "Taschenrechner" bauen? Dann wirst Du um das klassische Parsingverfahren mit polnischer Notation als Zwischenschritt nicht drum herum kommen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hello,

    für einen "Taschenrechner" empfehle ich Dir die Klasse rpn
    http://pear.php.net/package/Math_RPN/docs/latest/__filesource/fsource_math__Math_RPN-1.1.2MathRPN.php.html

    Ich bin mir aber im Moment nicht sicher, ob das die letzte fehlerberichtigte Version ist.
    Ich habe auf jeden Fall noch einen Stand vom (Thomas Schmieder, 2009-07-14 02:48), der gravierende Fehler beseitigt hatte.

    Nun sind die Methoden _stringToArray() und _keyExists() allerdings wieder drin und ob die noch Probleme machen mit Tokens, die in anderen enthalten sind, habe ich noch nicht getestet.

    Ich hatte den Fehler jedenfalls beseitigt.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de