2009-08-24 18 views
8

He encontrado muchos ejemplos de cómo hacer coincidir determinados tipos de URL-s en PHP y otros idiomas. Necesito hacer coincidir cualquier URL de mi aplicación C#. ¿Como hacer esto? Cuando hablo de URL, hablo sobre enlaces a cualquier sitio o a archivos en sitios y subdirectiories, etc.¿Cómo hacer coincidir la URL en C#?

Tengo un texto como este: "Vaya a mi excelente sitio web http: \ www.google.pl \ something \ blah \? Lang = 5" o bien y necesito obtener este enlace de este mensaje. Los enlaces pueden comenzar solo con www. también.

+0

Es de suponer que nos referimos a utilizar barras diagonales porque nunca se las URLs con barras invertidas ya que está confundiendo Microsoft \ Windows Land y Unix/WWW Land. –

Respuesta

14

Si necesita probar su expresión regular para encontrar las direcciones URL se puede tratar este recurso

http://gskinner.com/RegExr/

Se pondrá a prueba su expresión regular mientras se está escribiendo.

En C# puede utilizar expresiones regulares, por ejemplo, de la siguiente manera:

Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\[email protected]][\w.:@]+)\/?[\w\.?=%&=\[email protected]/$,]*"); 
// Match the regular expression pattern against a text string. 
Match m = r.Match(text); 
while (m.Success) 
{ 
    //do things with your matching text 
    m = m.NextMatch(); 
} 
+2

+1: aunque olvidó agregar el símbolo @ al frente de la cadena. –

+0

Éste falla con esto: 'http: // http: //www.test.com/' – Rumplin

+0

@Rumplin: ¿puedes explicar el error que obtienes? si intento con gskinner, la expresión regular coincide correctamente con http://www.test.com/ o ¿tiene la intención de utilizar toda la cadena con el ''? – michele

5

No estoy seguro exactamente de lo que está preguntando, pero un buen comienzo sería la clase Uri, que analizará la url por usted.

+0

Esto podría ser más específico: por ejemplo: var myUri = null; Uri.TryCreate (str, UriKind.Absolute, myVar); y compruebe si myUri cambió de nulo a no nulo. –

1
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 
14

Microsoft tiene una buena página de algunas expresiones regulares ... esto es lo que dicen (funciona bastante bien también)

^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$ 

http://msdn.microsoft.com/en-us/library/ff650303.aspx#paght000001_commonregularexpressions

+0

buen recurso, gracias Chuck –

+3

Ese no incluye la cadena de consulta detrás de la url. se detiene en la primera letra '='. Para solucionarlo, simplemente agregue el carácter simple '=' para que termine así: ".... &% \ $ # _ =] *)? $". Además, ese patrón regex no encontrará una url en la cadena. Solo te dirá que la cadena es una url o no. Para encontrarlo, omita "^" al comienzo y "$" al final. Regex.Matches (texto, patrón) debería devolver todas las direcciones URL en el texto. – Wolf5

+0

¿Incluye las URL de mailto? – user

Cuestiones relacionadas