2011-01-03 5 views
13

Ok, về cơ bản tôi có một số mã phù hợp với URL bằng regex. Sau đó nó sẽ gọi một số chức năng dựa trên đó regex URL phù hợp với. Tôi không bao giờ muốn cho nhiều hơn một chức năng để được gọi cho một URL và tôi muốn regex phù hợp để phải "chính xác"Làm cách nào để Regex chỉ khớp với các kết quả khớp chính xác?

Ví dụ, với URL đơn giản / tôi sử dụng một regex đơn giản / mà sẽ phù hợp với / nhưng nó cũng sẽ khớp với những thứ như /foo/foo/bar.

Làm cách nào để ngăn chặn hành vi khớp một phần này trong C# /. Net?

+1

Bạn đã thử sử dụng Định tuyến URL .NET thay vì lăn điều phối tuyến đường của riêng bạn chưa? –

+0

@JacobKrall vui bạn nên có đề cập đến điều đó. Tôi đã tiếp tục thực hiện định tuyến URL của riêng mình (theo cách thức độc lập hơn nhiều so với .Net) giống như một tháng sau câu hỏi này: P – Earlz

Trả lời

25

Sử dụng ^ để đối sánh sự bắt đầu của chuỗi và $ cho kết thúc chuỗi.

Ví dụ: ^/$ khớp với / nhưng không phải /foo. Và ^/ khớp với /foo nhưng không phải là foo/.

+0

Hmm. Tôi đã phải thay đổi xung quanh một vài regex để làm việc với điều này, nhưng điều này có vẻ là câu trả lời. Tôi đã không chắc chắn rằng nó đã có thể làm điều này chỉ có một chút sửa đổi các biểu thức thông thường – Earlz

-2

Gắn thêm khoảng trống ở đầu và cuối từ khóa bạn muốn đối sánh. Ví dụ: bạn có một chuỗi "Hey! foobar I am foo bar." Bây giờ, giả sử bạn muốn khớp với foo. Bạn có thể làm điều này /\s+foo\s+/i điều này sẽ trả về kết quả phù hợp cho chỉ foo và không foobar.

+1

Điều này không hoạt động nếu từ là chuỗi đầu tiên hoặc cuối cùng trong một câu hoặc chuỗi. – Mat