Mario: Regex Problem

Hi,

Folgendes soll gematcht werden:
en/0/index.html
de/1/2/index.html

Ist die dritte Gruppe aber 'index.html' bzw. 'index', dann soll diese ignoriert werden.

Folgende Regex habe ich schon vorbereitet:
([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/*([a-zA-Z0-9_]*)/*.*

Hinzu müsste was ähnliches wie:
^(index)

..aber wie genau und wo? In die letzte Klammer? Vor oder nach dem Sternchen?

Danke für eure Vorschläge!

  1. Folgendes soll gematcht werden:
    en/0/index.html
    de/1/2/index.html

    Also hexadezimaler String und dann ein Slash, und das ganze unendlich oft möglich, dann 'index.html'? Oder seh ich das falsch?

    Ist die dritte Gruppe aber 'index.html' bzw. 'index', dann soll diese ignoriert werden.

    Meinst du, wenn da _nur_ 'index.html' oder 'index' steht, wird nicht gematcht?

    Folgende Regex habe ich schon vorbereitet:
    ([a-zA-Z0-9_]+)

    Bei der Sammelgruppe solltest du auch weitere Werte der ASCII-Codetabelle erlauben. Also '[a-zA-Z0-9_\x7f-\xff]'.

    /([a-zA-Z0-9_]+)

    Siehe oben.

    /*

    Was soll denn das? Das erlaubt eine unendliche Anzahl von Slash hintereinander. Was hat das für einen Sinn?

    ([a-zA-Z0-9_]*)

    1)Siehe oben, 2) Warum hast du hier nicht ein '+' als Wiederholungszeichen, sondern den '*'?

    /*

    Siehe oben.

    .*

    Jetzt erlaubst du irgendein Zeichen. Was bringt denn das wieder?

    Hinzu müsste was ähnliches wie:
    ^(index)

    Sowas gibts nicht.

    ..aber wie genau und wo? In die letzte Klammer? Vor oder nach dem Sternchen?

    Das geht man etwas anders an bzw. es ergibt sich von selbst

    Danke für eure Vorschläge!

    Da mir noch nicht einmal klar ist, auf was denn der Regex matchen soll, und der Regex sowieso eigenartig ist, kann ich dir nicht helfen. Beschreib genauer, auf was gematcht werden soll.

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§
    1. gudn tach!

      Folgendes soll gematcht werden:
      en/0/index.html
      de/1/2/index.html

      Also hexadezimaler String und dann ein Slash, und das ganze unendlich oft möglich, dann 'index.html'? Oder seh ich das falsch?

      du siehst es falsch. 'n' ist keine hexadezimale zahl.

      Folgende Regex habe ich schon vorbereitet:
      ([a-zA-Z0-9_]+)

      Bei der Sammelgruppe

      fuer konstrukte wie [abc] gibt's einige namen, "sammelgruppe" ist jedoch unueblich. ueblich ist "character class" oder eben "zeichenklasse".

      solltest du auch weitere Werte der ASCII-Codetabelle erlauben. Also '[a-zA-Z0-9_\x7f-\xff]'.

      warum? bei hex-zahlen (um die es hier eh nicht geht) wuerde [a-fA-F0-9] genuegen. und bei kleingeschriebenen laendercodes genuegt afaik [a-z].

      Hinzu müsste was ähnliches wie:
      ^(index)

      Sowas gibts nicht.

      doch, es gibt negativ look-ahead assertions, z.b. (?!index$).

      Beschreib genauer, auf was gematcht werden soll.

      ack.

      prost
      seth

      1. Also hexadezimaler String und dann ein Slash, und das ganze unendlich oft möglich, dann 'index.html'? Oder seh ich das falsch?

        du siehst es falsch. 'n' ist keine hexadezimale zahl.

        Du hast natürlich recht. Ich habe aus versehen das falsche Wort genommen. Mir fällt jetzt der richtige Name nicht ein, ich mein das für Buchstaben und Zahlen, also ein '???? String' => einer mit Buchstaben und Zahlen (oder auch nur mit einem von beiden)

        fuer konstrukte wie [abc] gibt's einige namen, "sammelgruppe" ist jedoch unueblich. ueblich ist "character class" oder eben "zeichenklasse".

        Hab ich, glaub ich, alles schon gelesen.

        warum? bei hex-zahlen (um die es hier eh nicht geht)

        stimmt.

        und bei kleingeschriebenen laendercodes genuegt afaik [a-z].

        Ob es hier nur um Ländercodes geht? Der Regex sagt mir hier etwas anderes.

        doch, es gibt negativ look-ahead assertions, z.b. (?!index$).

        Kenn ich nicht (was nicht viel heißt).

        Beschreib genauer, auf was gematcht werden soll.

        ack.

        Als was darf ich diesen Ausdruck jetzt verstehen? Als Zustimmung, oder doch etwas anderes?

        mfg
        Rato

        --
        §§§
        Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
        §§§
        1. Hi Rato!

          ack.
          Als was darf ich diesen Ausdruck jetzt verstehen? Als Zustimmung, oder doch etwas anderes?

          ACK (Wikipedia)

          MfG H☼psel

          --
          "It's amazing I won. I was running against peace, prosperity, and incumbency."
          George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
          Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        2. gudn tach!

          du siehst es falsch. 'n' ist keine hexadezimale zahl.

          Du hast natürlich recht. Ich habe aus versehen das falsche Wort genommen. Mir fällt jetzt der richtige Name nicht ein, ich mein das für Buchstaben und Zahlen, also ein '???? String' => einer mit Buchstaben und Zahlen (oder auch nur mit einem von beiden)

          alphanumerisch ;-)

          fuer konstrukte wie [abc] gibt's einige namen, "sammelgruppe" ist jedoch unueblich. ueblich ist "character class" oder eben "zeichenklasse".

          Hab ich, glaub ich, alles schon gelesen.

          "sammelgruppe" wird dadurch trotzdem nicht ueblicher und hat zudem den nachteil verwechselt zu werden, weil mit "grouping" bzw. gruppieren eher das zusammenfassen mittels klammern gemeint ist.

          im zweifelsfall hat immer perldoc perlre recht.

          wenn du ums verrecken das unuebliche "sammelgruppe" als begriff verwenden willst, solltest du jeweils dazu schreiben, was du damit meinst.

          warum? bei hex-zahlen (um die es hier eh nicht geht)

          stimmt.

          und bei kleingeschriebenen laendercodes genuegt afaik [a-z].

          Ob es hier nur um Ländercodes geht? Der Regex sagt mir hier etwas anderes.

          aber er sagt dir nicht, dass \xff gematcht werden darf/sollte.

          doch, es gibt negative look-ahead assertions, z.b. (?!index$).

          Kenn ich nicht

          perldoc perlre hilft.

          (was nicht viel heißt).

          wenn du das aber weisst, solltest du nicht so leichtfertig "gibt's nicht" sagen.

          Beschreib genauer, auf was gematcht werden soll.

          ack.

          Als was darf ich diesen Ausdruck jetzt verstehen? Als Zustimmung,

          ja. die problembeschreibung des OP war zu ungenau/verwirrend.

          prost
          seth

          1. alphanumerisch ;-)

            Das wars!

            aber er sagt dir nicht, dass \xff gematcht werden darf/sollte.

            Okay, das war eine falsche Annahme von mir. Ich weiß eigentlich nicht, welche Zeichen in Verzeichnisnamen erlaubt sind (nach Verzeichnissen sieht es zumindest in den beiden Beispielen aus)

            (was nicht viel heißt).

            wenn du das aber weisst, solltest du nicht so leichtfertig "gibt's nicht" sagen.

            Grundsätzlich ACK, nur war mir das zur Zeit meines ersten Postings in diesem Tread noch nicht klar. Außerdem war das in der Klammer etwas allgemeiner gemeint.

            mfg
            Rato

            --
            §§§
            Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
            §§§
  2. gudn tach!

    Folgendes soll gematcht werden:
    en/0/index.html
    de/1/2/index.html

    Ist die dritte Gruppe aber 'index.html' bzw. 'index', dann soll diese ignoriert werden.

    aeh, was denn nun? matchen oder ignorieren?

    wenn du alles, was so aehnlich anfaengt, wie deine beiden beispiele aber nicht mit /index(.html)?/ aufhoeren soll, matchen willst, koennte

    #[1]+(?:/\d)+/(?!index(?:.html)?)[^/]*\z#

    als ansatz dienen.
    beschreibug der einzelnen bestandteile kannst du z.b. im perl-manual nachlesen.
    wenn dann noch etwas nicht klar sein sollte, frag einfach noch mal.

    prost
    seth


    1. a-z ↩︎

  3. ok, viele Antworten, viel Verwirrung :)
    Hinweis, es handelt sich um Inhalt einer htaccess-Datei.

    en/0/index.html    => index.php?locale=en&param1=0&param2=
                nicht! => index.php?locale=en&param1=0&param2=index
    de/1/2/index.html  => index.php?locale=de&param1=1&param2=2

    Ich hoffe es wird deutlicher was die Aufgabenstellung ist. :)
    Vielleicht ist eine Lösung, zwei verschiede Rules zu definieren?

    Grüße!