Wie kann ich ausschließen, ein Verzeichnis mit regulären Ausdrücken?

Fragte ich eine Frage, vor einer Weile über die Verwendung regulärer Ausdrücke zum extrahieren einer übereinstimmung von einer URL in einem bestimmten Verzeichnis.

zB: www.domain.com/shop/widgets/match/

Die Lösung gegeben war ^/shop.*/([^/]+)/?$

Dieser zurückkehren würde "match"

Jedoch meine Datei Struktur geändert hat und ich brauche jetzt ein Ausdruck, der statt zurück "match" in jedem Verzeichnis ohne "pages" und "system"

Im Prinzip brauche ich einen Ausdruck, der zurück "match" für die folgenden:

www.domain.com/shop/widgets/match/
www.domain.com/match/

Aber nicht:

www.domain.com/pages/widgets/match/
www.domain.com/pages/

www.domain.com/system/widgets/match/
www.domain.com/system/

Ich habe gekämpft, für Tage ohne Glück.

Dank

  • warum nicht einfach zwei regex ist die, die Sie jetzt haben, und zu überprüfen, um zu sehen, wenn das Wort "Seiten" oder "system" ist in der URL.
  • ^/shop.*/([^/]+)/?$ würde nicht mit www.domain.com/shop/widgets/match/ überhaupt. Es würde allerdings passen /shop/widgets. Könnten Sie /^[a-z0-9.-]+\/shop\/[^\/]+\/([^\/]+)\/$/ extrahieren "match" aus, die URL-segment als \1. Ich bin entkommen aus der Schrägstriche, weil ich bin auch mit Schrägstrichen als Trennzeichen. Wenn Sie nicht brauchen, Trennzeichen, die Sie nicht brauchen, um zu entkommen Schrägstriche.
  • Hey, das ist eine gute Idee. Ich werde geben, dass ein zu gehen. Aber ich bin gespannt, wie es fertig, in einem einzigen Ausdruck.
  • IMHO oft, wenn ein einzelner regex erfüllt zwei Aufgaben, es ist "clever", aber übermäßig Komplex und sehr schwer zu Lesen. Nur meine zwei Cent.
InformationsquelleAutor Matt | 2012-04-01
Schreibe einen Kommentar