2011-01-20 31 views
5

thể trùng lặp:
C# code to linkify urls in a stringbiểu hiện thường xuyên để tìm các URL trong một chuỗi

tôi chắc chắn rằng đây là một câu hỏi ngu ngốc nhưng tôi không thể tìm thấy một câu trả lời khá bất cứ nơi nào. Tôi cần một biểu thức chính quy URL tốt cho C#. Nó cần phải tìm tất cả các URL trong một chuỗi để tôi có thể bọc mỗi URL trong html để làm cho nó có thể nhấp được.

  1. Biểu thức tốt nhất để sử dụng cho điều này là gì?

  2. Khi tôi có biểu thức, cách tốt nhất để thay thế các URL này bằng các đối tác được định dạng đúng của họ là gì?

Cảm ơn bạn trước!

+3

có thể lặp lại? [Mã C# để liên kết các URL trong một chuỗi] (http://stackoverflow.com/questions/758135/c-code-to-linkify-urls-in-a-string) – eldarerathis

Trả lời

34

Tôi đang sử dụng này ngay bây giờ:

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

Bạn có sử dụng mã này chính xác không? Visual Studio nghĩ rằng tất cả những dấu gạch chéo ngược là "Chuỗi thoát không được nhận dạng". – brainmurphy1

+1

@ brainmurphy1 Bạn có bao gồm '@' trước dấu ngoặc kép mở cho chuỗi không? Điều đó nói với trình phân tích cú pháp/trình biên dịch rằng nó là một chuỗi ký tự và bỏ qua các chuỗi thoát. – Chev

+1

Có, cảm ơn bạn; Tôi đã tìm ra điều đó. Nó hoạt động như nó cần. – brainmurphy1

7

Sử dụng mã này

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

Sử dụng nút '{}', chứ không phải Nút '' '. :) –

+0

Sử dụng' RegexOptions.Compiled' và 'String.Format' – abatishchev

+2

Ngoài ra, hãy xem [@ quoted string expressions] (http://msdn.microsoft.com/en-us/library/ 362314fe (v = VS.100) .aspx # CodeSnippetContainerCode6) Nó làm cho regex của bạn dễ đọc hơn nhiều (không kể đến việc có thể sao chép/dán và không có gì), nghĩa là '' @http: // ([\ w +? \ . \ w +]) + ([a-zA-Z0-9 \ ~ \! \ @ \ # \ $ \% \^\ & \ * \ (\) _ \ - \ = \ + \\\/\? \. \: \; \ '\,] *)? "' –

Các vấn đề liên quan