2011-01-03 6 views
13

Ok, also im Grunde habe ich ein bisschen Code, der URLs durch Regexs entspricht. Es ruft dann eine Funktion auf, basierend auf welcher Regex die URL übereinstimmt. Ich will nie für mehr als eine Funktion für eine URL aufgerufen werden, und ich mag die Regex zu haben paßt „exakt“Wie kann man Regexs nur mit exakten Übereinstimmungen vergleichen?

Zum Beispiel sein, mit der einfachen URL / ich / eine einfache regex verwenden, welche / wird passen, aber es wird auch Dinge wie /foo und /foo/bar übereinstimmen.

Wie kann ich dieses partielle Matching-Verhalten in C# /. Net verhindern?

+1

Haben Sie versucht, mit .NET URL Routing statt Rolling Ihre eigenen Route Dispatcher? –

+0

@JacobKrall lustig du hättest das erwähnen sollen. Ich fuhr fort, meine eigene URL-Routing-Methode (in einem viel eigenständigeren Modus als .Net) wie einen Monat nach dieser Frage zu implementieren: P – Earlz

Antwort

25

Verwenden Sie ^ für den Anfang einer Zeichenfolge und $ für das Ende einer Zeichenfolge.

Zum Beispiel: ^/$ entspricht /, aber nicht /foo. Und ^/ entspricht /foo aber nicht foo/.

+0

Hmm. Ich musste mich um ein paar Regex umstellen, um damit zu arbeiten, aber das scheint die Antwort zu sein. Ich war nicht sicher, dass es möglich war, dies nur zu tun, die regulären Ausdrücke leicht ändernd – Earlz

-2

Leerzeichen an Anfang und Ende des Schlüsselworts anfügen, mit dem Sie übereinstimmen möchten. Zum Beispiel haben Sie eine Zeichenfolge "Hey! foobar I am foo bar." Jetzt sagen wir, Sie wollen foo übereinstimmen. Sie können dies tun /\s+foo\s+/i dies wird nur für foo und nicht foobar Match zurückgeben.

+1

Dies funktioniert nicht, wenn das Wort die erste oder die letzte in einem Satz oder die Zeichenfolge ist. – Mat

Verwandte Themen