2011-01-03 8 views
13

Ok, básicamente tengo un poco de código que coincide con las URL por expresiones regulares. A continuación, invocará alguna función según la expresión regular con la que coincida la URL. No quiero volver para más de una función a ser llamada para una dirección URL y quiero que la expresión regular partidos a tener que ser "exacto"¿Cómo hacer que Regexs solo coincida en coincidencias exactas?

Por ejemplo, con la simple URL / utilizo una expresión regular sencilla / que coincidirá con / pero también coincidirá con cosas como /foo y /foo/bar.

¿Cómo puedo evitar este comportamiento de coincidencia parcial en C# /. Net?

+1

¿Ha intentado utilizar .NET URL Routing en lugar de hacer rodar su propio despachador de rutas? –

+0

@JacobKrall divertido, deberías haber mencionado eso. Seguí implementando mi propio enrutamiento de URL (de una manera mucho más independiente que el método de .Net) como un mes después de esta pregunta: P – Earlz

Respuesta

25

Utilice ^ para hacer coincidir el inicio de una cadena y $ para el final de una cadena.

Por ejemplo: ^/$ coincide con / pero no /foo. Y ^/ coincide con /foo pero no con foo/.

+0

Hmm. Tuve que cambiar unas pocas expresiones regulares para trabajar con esto, pero esta parece ser la respuesta. No estaba seguro de que fuera posible hacerlo solo modificando ligeramente las expresiones regulares – Earlz

-2

Añadir espacio al inicio y al final de la palabra clave con la que desea hacer coincidir. Por ejemplo, tiene una cadena "Hey! foobar I am foo bar." Ahora supongamos que quiere hacer coincidir foo. Puedes hacer esto /\s+foo\s+/i esto devolverá la coincidencia solo para foo y no para foobar.

+1

Esto no funciona si la palabra es la primera cadena o la última en una oración o la cadena. – Mat

Cuestiones relacionadas