Schnaps: Kleines RegExp Problem

Servus

Ich filter mit regexp teile aus einem string.

Das ist mein Muster:  /^([a-zA-Z-&;]*)/([a-zA-Z-&;]*)/

Es findet wie erwartet aus dem String  Treffer1/Treffer2
die beiden Treffer.

Nun kann es aber auch sein das der String nur wiefolgt aussieht

Treffer1

Und dann findet das Muster natürlich nichst mehr ich habe aber gerade keine Idee wie ich den Ausdruck ändern muß das er beide Möglichkeiten abdeckt. Wird wohl was mit dem | oder Strich sein, oder?

Währe nett wenn mir einer von euch eben auf die Sprünge hilft.

Prost
Schnaps

  1. Hi,

    Das ist mein Muster:  /^([a-zA-Z-&;]*)/([a-zA-Z-&;]*)/

    Geht das gut? Mit dem - mittendrin, das keinen Zeichenbereich kennzeichnet?

    Es findet wie erwartet aus dem String  Treffer1/Treffer2
    die beiden Treffer.
    Nun kann es aber auch sein das der String nur wiefolgt aussieht
    Treffer1

    Mit anderen Worten: der / ist optional.

    Und dann findet das Muster natürlich nichst mehr ich habe aber gerade keine Idee wie ich den Ausdruck ändern muß das er beide Möglichkeiten abdeckt. Wird wohl was mit dem | oder Strich sein, oder?

    Ne, ein Fragezeichen reicht - anzuwenden auf den Teil des Regex, der optional ist.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. hi

      Mit anderen Worten: der / ist optional.

      nee, das waere zu allgemein formuliert, denke ich. denn wenn
      "Treffer1Treffer2" zwei teile enthaelt, muss schon ein / dazwischen sein.

      optional ist also der teil /([a-zA-Z-&;]*)

      der komplette ausdruck lautet somit:
      /^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/

      und noch besser ist eigentlich
      /^([a-zA-Z-&;]*)(?:/([a-zA-Z-&;]*))?/
      damit der zweite teil nicht mit slash gespeichert wird.
      allerdings bin ich mir nicht ganz sicher, ob das bei php geht.

      prost
      seth

      1. Hi,

        nee, das waere zu allgemein formuliert, denke ich. denn wenn
        "Treffer1Treffer2" zwei teile enthaelt, muss schon ein / dazwischen sein.
        optional ist also der teil /([a-zA-Z-&;]*)
        der komplette ausdruck lautet somit:

        Deine Lösung:

        /^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/

        Meine Lösung:
        /^([a-zA-Z-&;]*)/?([a-zA-Z-&;]*)/

        Wo siehst Du den Unterschied beim gematchten Text?

        Aufgrund des * nach der 2. [] kann die zweite Klammer () auch NICHTS matchen.

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. hi Andreas!

          /^([a-zA-Z-&;]*)(/([a-zA-Z-&;]*))?/
          /^([a-zA-Z-&;]*)/?([a-zA-Z-&;]*)/

          Wo siehst Du den Unterschied beim gematchten Text?

          aeh, ach so, hmm, ohh, aeh... *rotwerd*... ich muss weg... ;-)

          ja, hast ja recht. *sich_in_ecke_stell_und_schaem*

          @Schnaps, falls du jetzt verwirrt sein solltest: nimm Mudguards regexp. seine loesung ist besser (weil sie macht, was sie soll, aber kuerzer ist als die von mir genannte loesung.)

          prost
          seth