2011-07-25 49 views
1

我有一塊用戶文本,我需要找到所有網址並將其更改爲超鏈接。例如,在下面的塊中,我需要用和www.yahoo.com替換www.google.com與<a href="www.yahoo.com">www.yahoo.com</a>使用C#的實時鏈接替換網址

Lorem ipsum dolor sit www.google.com amet,consectetuer adipiscing elit,www.yahoo.com sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat。我是否需要拆分字符串,然後將每個單詞與正則表達式匹配,如果找到匹配,我將替換嗎?但我認爲有一個更好的辦法,只是我無法弄清楚。

thanx的幫助。

Devang。

+0

它需要多好?例如,你是否希望它匹配像'google.com'這樣的網域,或者你能否認爲鏈接始終以'www'開頭? – cbp

+0

http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links 這看起來像一個很好的解決方案 – rkw

+0

@cbp - 正則表達式需要適應www和各種組合HTTP/s,然後是地址,當然如果塊中有多個url,它應該足夠聰明以替換所有的url。最後一件事是網址後面可能會出現特殊字符,如逗號,句號,問號等。 – DevM

回答

0
string s = "Lorem ipsum dolor sit www.google.com amet, consectetuer adipiscing elit, www.yahoo.com sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip"; 

string newS = Regex.Replace(s, "((https?://)?www\\.[^\\s]+)", "<a href=\"$1\">$1</a>"); 

Console.WriteLine(newS); 
+1

「你去過www.yahoo.com嗎? – Gabe

0

Regex.Replace將取代匹配給定模式的子串中多次出現,所以沒有必要先拆分字符串。

困難的部分是決定你想要作爲一個URL匹配什麼。例如,如果你想匹配與RFC 3987兼容的任何字符串,那麼你的模式會變得相當複雜。

如果您的嵌入式URL不包含「http://」部分,那麼標識它們可能會很困難,因此您選擇的模式將取決於您的輸入文本。