2011-01-20 13 views
5

Duplicar posible:
C# code to linkify urls in a stringExpresión regular para encontrar las direcciones URL dentro de una cadena

Estoy seguro de que esto es una pregunta estúpida, pero no puedo encontrar una respuesta decente en cualquier lugar. Necesito una buena expresión regular de URL para C#. Necesita encontrar todas las URL en una cadena para que pueda envolver cada una en html para que se pueda hacer clic.

  1. ¿Cuál es la mejor expresión para usar para esto?

  2. Una vez que tengo la expresión, ¿cuál es la mejor manera de reemplazar estas URL con sus contrapartes formateadas correctamente?

¡Gracias de antemano!

+3

posible duplicado? [Código de C# para vincular URL en una cadena] (http://stackoverflow.com/questions/758135/c-code-to-linkify-urls-in-a-string) – eldarerathis

Respuesta

34

estoy usando esto ahora:

text = Regex.Replace(text, 
       @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", 
       "<a target='_blank' href='$1'>$1</a>"); 
+0

¿Usó este código exactamente? Visual Studio cree que todos esos las barras invertidas son "Secuencia de escape no reconocida" s. – brainmurphy1

+1

@ brainmurphy1 ¿Incluyó el '@' al principio de la cita de apertura de la cadena? Eso le dice al analizador/analizador que es un literal de cadena e ignora las secuencias de escape. – Chev

+1

Sí, gracias; Yo deduje eso. Funciona como deberia. – brainmurphy1

7

Usar este código

protected string MakeLink(string txt) 
{ 
    Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);   
    MatchCollection mactches = regx.Matches(txt);   
    foreach (Match match in mactches) 
    { 
     txt = txt.Replace(match.Value, "<a href='" + match.Value + "'>" + match.Value + "</a>"); 
    }  
    return txt; 
} 
+1

Use el botón '{}', no el '" 'button. :) –

+0

Use' RegexOptions.Compiled' y 'String.Format' – abatishchev

+2

Además, eche un vistazo a [@ expresiones de cadena entrecomilladas] (http://msdn.microsoft.com/en-us/library/ 362314fe (v = VS.100) .aspx # CodeSnippetContainerCode6) Hace que su expresión regular sea mucho más legible (sin mencionar la posibilidad de copiar/pegar y otras cosas). Es decir, '" @http: // ([\ w +? \ . \ w +]) + ([a-zA-Z0-9 \ ~ \! \ @ \ # \ $ \% \^\ & \ * \ (\) _ \ - \ = \ + \\\/\? \. \: \; \ '\,] *)? "' –

Cuestiones relacionadas