The Tobe: RegExp Frage

Hey Leute,
ich habe einen regulären Ausdruck der wie folgt aussieht:
([a-zA-Z]+)test\s*

Dieser findet z.B. Wörter wie: bautest
und gibt mir danach bau zurück.

das gleich sollte nun auch für das wort: baut
möglich sein.

Das Problem ist nun, dass ich nicht weiß, wie ich das in einem regulären Ausdruck unterbringen kann (bitte nicht sagen, dass ich es auf zwei aufteilen soll... :D). Ich habe schon folgendes Probiert:
([a-zA-Z]+)(test|t)\s*

Bei der Untersuchung des Wortes "bautest" gibt er mir nun "bautes" zurück, da ja das "t" ebenfalls der letzte Buchstabe des Wortes "bautest" ist. Die erste Bedingung, dass "test" am Ende des Wortes steht wird jedoch nicht berücksichtigt. Wie kann ich es nun hinbekommen, dass der reguläre Ausdruck zuerst prüft ob "test" am Ende des Wortes steht und dann erst ob "t" am Ende des Wortes steht?

Vielen Dank für eure Hilfe!!

Tobi

  1. Hey Leute,

    Hallo,

    Das Problem ist nun, dass ich nicht weiß, wie ich das in einem regulären Ausdruck unterbringen kann (bitte nicht sagen, dass ich es auf zwei aufteilen soll... :D). Ich habe schon folgendes Probiert:
    ([a-zA-Z]+)(test|t)\s*

    Bei der Untersuchung des Wortes "bautest" gibt er mir nun "bautes" zurück, da ja das "t" ebenfalls der letzte Buchstabe des Wortes "bautest" ist. Die erste Bedingung, dass "test" am Ende des Wortes steht wird jedoch nicht berücksichtigt. Wie kann ich es nun hinbekommen, dass der reguläre Ausdruck zuerst prüft ob "test" am Ende des Wortes steht und dann erst ob "t" am Ende des Wortes steht?

    Versuch doch einmal deinem RegExp zu sagen, es soll nicht so gierig sein, oder arbeite mit +?, dann bricht er bei der ersten gefundenen Variante ab.

    Btw. \s ist ein Doofes Wortende, da nicht jedes Wort mit einer Art Leerzeichen endet. Ich nehme gern "\w" für Wort-Zeichen und "\W" für Nicht-Wort-Zeichen.

    Vielen Dank für eure Hilfe!!

    Tobi

    Mfg Pryos

    1. Hey Pryos,
      danke für die schnelle Antwort!

      Ich habe jetzt folgendes ausprobiert:
      ([a-zA-Z]+)(t|test)+?\s*
      UND
      ([a-zA-Z]+)(t+?|test+?)\s*

      beides hat nicht funktioniert (wobei der zweite Versuch auch nur wenig Sinn ergibt...*gg*). Es wird bei dem Untersuchungswort "bautest" immernoch "bautes" zurückgegeben und nicht "bau" wie ich es gerne hätte. Kann man vielleicht bei der Suchliste (t|test) eine Reihenfolge angeben, dass er zuerst nach "test" sucht und dann erst nach "t"? Das wäre prima, da das Problem dann gelöst wäre.

      Greetz, Tobi

      1. Ich habe jetzt folgendes ausprobiert:
        ([a-zA-Z]+)(t|test)+?\s*
        UND
        ([a-zA-Z]+)(t+?|test+?)\s*

        beides hat nicht funktioniert (wobei der zweite Versuch auch nur wenig Sinn ergibt...*gg*). Es wird bei dem Untersuchungswort "bautest" immernoch "bautes" zurückgegeben und nicht "bau" wie ich es gerne hätte. Kann man vielleicht bei der Suchliste (t|test) eine Reihenfolge angeben, dass er zuerst nach "test" sucht und dann erst nach "t"? Das wäre prima, da das Problem dann gelöst wäre.

        /(\b[a-zA-Z]+?)(t|test)\b/

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. @@Beat:

          nuqneH

          /(\b[a-zA-Z]+?)(t|test)\b/

          Wo wir bei den Fragezeichen sind:

          /(\b[a-zA-Z]+?)(?:t|test)\b/

          AFAIS sollte ja der Match der zweiten Klammer nicht gespeichert werden.

          Qapla'

          --
          Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        2. YEAAHHHHH...das funktioniert.

          Aber warum funktioniert das? verstehe nicht ganz, wieso er nun korrekt parst... :(

          greetz, tobi

        3. Ahhh, okay...hab´s mir nochmal genau angeschaut und geschnallt.

          Danke für die rege Hilfe von euch! Echt super hier...! ;-)

          greetz, Tobi

      2. Hey Pryos,

        Hallo,

        Ich habe jetzt folgendes ausprobiert:
        ([a-zA-Z]+)(t|test)+?\s*
        UND
        ([a-zA-Z]+)(t+?|test+?)\s*

        Dir wurde zwar schon geholfen, aber ich frage mich warum du die +? gerade da ansetzt und nicht dort wo bereits ein + steht ;).

        Nun ich drücke mich nächstes mal genauer aus.

        Greetz, Tobi

        Mfg Pryos