Jan W: Regex-Frage

Hallo!

Ich benötige eine Regex, die folgendes abdeckt.

Eine Zeichenkette beginnt mit "/ratgeber/" und danach können beliebig viele (auch Null) Zeichen folgen, außer einem "/".

Mein Teststring ist "/ratgeber/xxx/xxxx/xxx"

Ich dachte erst, dass es mit dieser Regex gehen sollte: /ratgeber/.*(?!/) Geht aber nicht.

Was zum Teil geht ist: /ratgeber/.*(?=/)

"Zum Teil" bedeutet, dass wenn nach der Zeichenkette "/ratgeber/" in dem String dann noch zwei weitere "/" enthalten sind, matcht die Regex immerhin noch bis zum ersten "/".

Ich muss zugeben, dass ich mit den Lookaheads und Lookbehinds so meine Verständnisprobleme habe :(

Danke Jan

  1. Tach!

    Eine Zeichenkette beginnt mit "/ratgeber/" und danach können beliebig viele (auch Null) Zeichen folgen, außer einem "/".

    "Außer einem /" schreibt man zum Beispiel als [^/], gegebenenfalls noch mit maskiert, wenn der ganze Ausdruck in / eingefasst ist. Aber wenn / als Muster vorkommen, nimmt man lieber keine / als Begrenzer.

    "Zum Teil" bedeutet, dass wenn nach der Zeichenkette "/ratgeber/" in dem String dann noch zwei weitere "/" enthalten sind, matcht die Regex immerhin noch bis zum ersten "/".

    Ja, das ist das was du formuliert hast. Willst du also doch nicht "außer /" suchen, also soll / nun enthalten sein oder nicht? Dann beschreib mal genauer, was du haben möchtest. mit Beispiel vielleicht, was soll und was nicht soll.

    dedlfix.

    1. Ja, das ist das was du formuliert hast. Willst du also doch nicht "außer /" suchen, also soll / nun enthalten sein oder nicht? Dann beschreib mal genauer, was du haben möchtest. mit Beispiel vielleicht, was soll und was nicht soll.

      Ok, ein wenig ausführlich, weiß immer nicht, ob es erst mal besser ist, sich hier kurz zu halten :)

      Es geht um eine rewrite-Regel für einen Nginx-Webserver.

      Wenn die 'location' die Zeichenkette "/ratgeber/faq.html" enthält, soll die entsprechende URL aufrufen.

      Wenn die 'location' die Zeichenkette "/ratgeber/technik/auto/faq.html" oder auch "/ratgeber/technik/faq.html" enthält, soll es einen Redirect geben.

      Wie das dann direkt für Nginx aufbereitet werden muss, kann ich nicht sagen. Meine Aufgabe ist es nur, erst mal eine entsprechende Regex zu liefern :)

      Danke Jan

      1. Tach!

        Wenn die 'location' die Zeichenkette "/ratgeber/faq.html" enthält, soll die entsprechende URL aufrufen.

        Wenn die 'location' die Zeichenkette "/ratgeber/technik/auto/faq.html" oder auch "/ratgeber/technik/faq.html" enthält, soll es einen Redirect geben.

        Na dann so: \/ratgeber\/.*\/.* findet alles was nach dem /ratgeber/ noch einen / irgendwo hat und davor und danach 0 oder mehrere beliebige Zeichen.

        dedlfix.