regulary express: Wie können mehrere Zeichengruppen ausgeschlossen werden?

8

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?

    
Shawn 08.01.2010, 05:30
quelle

3 Antworten

16

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.

%Vor%

Beachten Sie, dass Sie stattdessen Folgendes möchten, wenn Sie nicht zulassen, dass Kundennamen Schrägstriche enthalten:

%Vor%     
Brian Campbell 08.01.2010, 05:48
quelle
6

Das ist der falsche Weg, um das Problem zu lösen, aber es ist möglich, fixierte negative Lookaheads auszudrücken, ohne negative Lookaheads zu verwenden. Extra Abstand für Klarheit:

%Vor%     
ephemient 08.01.2010 05:52
quelle
0

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 .

    
Qberticus 08.01.2010 05:43
quelle

Tags und Links