2011-01-03 11 views
13

Ok, więc w zasadzie mam trochę kodu, który dopasowuje adresy URL za pomocą wyrażeń regularnych. Następnie wywoła jakąś funkcję, na podstawie której wyrażenie regularne dopasuje adres URL. Nigdy nie chcę więcej niż jednej funkcji na miano dla adresu URL i chcę regex mecze mają być „dokładny”Jak sprawić, aby Regeksy pasowały tylko do dopasowań ścisłych?

Na przykład, z prostego URL / Używam prostego wyrażenia regularnego / który będzie pasował / ale będzie również pasować do rzeczy takich jak /foo i /foo/bar.

Jak mogę zapobiec temu częściowemu dopasowywaniu zachowania w C#/.net?

+1

Czy próbowałeś używać usługi .NET URL Routing zamiast toczyć własnego dyspozytora tras? –

+0

@JacobKrall zabawne, że powinieneś o tym wspomnieć. Zacząłem implementować własne routing adresów URL (w bardziej niezależny sposób niż .Net), jak miesiąc po tym pytaniu: P – Earlz

Odpowiedz

25

Użyj ^ do dopasowania początku łańcucha i $ na końcu ciągu znaków.

Na przykład: ^/$ pasuje /, ale nie /foo. I ^/ pasuje /foo, ale nie foo/.

+0

Hmm. Musiałem zmienić kilka wyrażeń regularnych, aby pracować z tym, ale wydaje się, że jest to odpowiedź. Nie byłem pewien, czy można to zrobić tylko nieznacznie modyfikując wyrażenia regularne. – Earlz

-2

Dodaj spację na początku i końcu słowa kluczowego, które chcesz dopasować. Na przykład masz ciąg "Hey! foobar I am foo bar." Teraz powiedzmy, że chcesz dopasować foo. Możesz to zrobić /\s+foo\s+/i to spowoduje powrót do dopasowania tylko dla foo, a nie foobar.

+1

To nie działa, jeśli słowo jest pierwszym ciągiem lub ostatnim w zdaniu lub ciągu. – Mat

Powiązane problemy