Ich habe eine Reihe von URLs:
/ Produkte
/ Kategorien
/ Kunden
Sagen Sie jetzt, ein Kunde heißt John, und ich möchte John helfen, seine eigene Kontoseite mit einer kürzeren URL zu erreichen:
%Vor%(Angenommen, Kundennamen sind eindeutig)
Ich versuche, einen richtigen Regex-Dispatcher zu finden, damit alle Kunden diese Funktion haben können:
%Vor%hier ist, was ich jetzt (in PHP) habe:
%Vor%Das scheint nicht zu funktionieren. Kann mir jemand helfen?
Was Sie hier brauchen, ist eine negative Vorausschau Behauptung . Was Sie sagen möchten, ist "Ich möchte eine beliebige Zeichenkette abgleichen, mit Ausnahme dieser speziellen Zeichenketten." Eine Assertion in einer Regex kann mit einer Zeichenfolge übereinstimmen, verbraucht jedoch keine Zeichen, sodass diese Zeichen vom Rest der Regex abgeglichen werden können. Sie können eine negative Assertion angeben, indem Sie ein Muster in (?!
und )
einschließen.
Beachten Sie, dass Sie stattdessen Folgendes möchten, wenn Sie nicht zulassen, dass Kundennamen Schrägstriche enthalten:
%Vor%Sie versuchen, eine negierte Zeichenklasse falsch zu verwenden. Eine negierte Zeichenklasse sagt 'nicht mit den enthaltenen Zeichen übereinstimmen'. Was du sagen willst, ist: "Passe nicht zusammen, wenn das hier spezifizierte Zeug existiert". Um das zu tun, musst du ein bisschen kreativer sein. Vermutlich brauche ich einen negativen Lookbehind. Ich bin nicht 100% sicher über die Regex-Engine von PHP, aber etwas ähnliches sollte funktionieren.
%Vor% so, negatives lookbehind (?<! ... )
say stimmt nicht mit .+
überein, wenn products
oder categories
oder admin
vorangestellt ist. Dann ist das in einer nicht einfangenden Gruppe (?: ... )
.
Weitere Informationen finden Sie Regular Expression Advanced Syntax Reference .
Tags und Links regex