2011-01-10 15 views
2

Ich brauche ein Stück Regex, das für eine NICHT-Übereinstimmung verwendet werden kann. Nehmen Sie beispielsweise für dieSo ignorieren Sie Wörter in einer Zeichenfolge mit regulären Ausdrücken

http://www.site.com/layout/default.aspx 
http://www.site.com/default.aspx 
http://www.site.com/layout.aspx 

Die Regex der folgenden URL sollte keine URL-Zeichenfolge Übereinstimmen, die das Verzeichnis "Layout" enthält

http://www.site.com/layout/default.aspx 

und ich stattdessen auf

http://www.site.com/default.aspx 
http://www.site.com/layout.aspx 

entsprechen sollten, wie kann ich tun dies mit .NET regex?

+1

Hängt davon ab, welches Werkzeug Sie verwenden. –

+0

Laut meiner Antwort kann dies mit negativem Lookahead gemacht werden, was in den meisten Regex-Implementierungen unterstützt wird. –

Antwort

3

Verwenden Sie negative Lookahead:

^(?!.*/layout/)

Sie haben an den Anfang der Zeichenfolge zu verankern, oder Sie werden Fehlalarme auslösen, das heißt (?!/layout/) allein wird nicht funktionieren.

+0

Danke, das hat irgendwie funktioniert. Ich benutze 'h t t p: // domain/(?!. * Layout /). +', Da ich die Matches zurückgeben muss. – Fixer

+0

Ich bin froh, dass ich helfen konnte. Wenn Sie es etwas sauberer machen wollen, können Sie folgendes verwenden: '(?!. */Layout /) http: // domain /.+' –

0

Passen Sie einfach /layout/ an und invertieren Sie das Ergebnis, egal welche Sprache Sie verwenden.

z. mit PHP:

if(!preg_match('#/layout/#i', $url)) { 
    // does not match layout 
} 
0

PYTHON:

 
import re 
if not re.match('layout'): 
     #do whatever here 

re ist regex für Python

1

Wenn Sie alles in einem regulären Ausdruck drücken müssen, negative Vorschau versuchen, etwas entlang der Linien von dieser:

(?!layout)

+0

Dies funktioniert nicht, da es mit der ersten Position in der Zeichenfolge übereinstimmt, auf die nicht "Layout" folgt. –

+0

@Bennor McCarthy: Ja, kombinieren Sie dies mit der echten Regex für die URL und es wird funktionieren. So etwas (grob, ungetestet, nicht vollständig durchdachtes Beispiel, also Vorsicht): "http: // [-a-z0-9] + .com/((?! Layout). + /) * [^. ] + \ .. + 'BITTE benutze diese Regex nie wirklich, es macht viele falsche Annahmen (wie jede Datei hat das Format name.extension). – orlp

+0

Ja, fair genug, aber Sie würden es immer noch an eine genaue Stelle in der Zeichenfolge binden (was in Ordnung sein kann, abhängig von den Anforderungen). –

Verwandte Themen