2016-04-16 60 views
1

更換網址,我想替換例如網址www.google.com或http://www.google.com與www.google.com我對這個C#查找和字符串的正則表達式

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

它正在與http://www.google.com代碼但它不適用於www.google.comsubdomain.google.com哪些正則表達式代碼與每個網址鏈接匹配。當我寫了一個長鏈接,它會寫相同的網址爲例

http://www.google.com/search/asdadad/sdsdsd/sadasdx-sadasd-weqeqwe-zxcxzc.com 

。我想把它寫成

<a href="http://www.google.com/search/asdadad/sdsdsd/sadasdx-sadasd-weqeqwe-zxcxzc.com">google.com/asdas... </a>

是什麼使這個最好的方式?我是新的正則表達式

回答

1

這也將趕上www.test.com

(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑---------------------↑↑ 

只是圍繞着部分這就是可選的,追加一個問號。 你可以檢查出來here.


的第一場比賽在這個表達式(匹配與定義「(」和「)」)是整個URL。所以,你可以使用替換這樣的:

Regex rgxUrls = new Regex(pattern); 
string result = rgxUrls.Replace(yourText, "<a href=\"$1\"> space for custom text </a>"); 
                 ↑ Inserts first match 

enter image description here

當我用$1你也可以使用$2 - $5。檢查上面的圖片,顯示哪些組正在捕獲url的哪一部分。

完整的測試可以發現here
只需點擊頂部的執行即可。

輸出: enter image description here


根據該意見,字幕組的工作原理:

Text: "this is your text to search" 
Pattern: "text to" 

比賽[0]總是匹配你的整個比賽text to。上面的每個組像Match[1]Match[2]都必須用「(」和「)」來定義。

Text: "this is your text to search" 
Pattern: "text (to)" 
Match[0]: "text to" 
Match[1]: "to" 


Pattern: "text (t(o))" 
Match[0]: "text to" 
Match[1]: "to" 
Match[2]: "o" 

帶「()」的標題的作品從外部到內部。

$1 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑--------------------------------------------------------------------------------------------------↑ 

$2 (http://) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑---------------------↑ 

$3 (http) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
    ↑--------------↑ 

$4 (.com) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
           ↑----------↑ 

$5 (/appendedSubdirectory/anotherOne) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
               ↑--------------------------------------------------↑ 

我不能在這裏解釋有關正則表達式的一切。這個問題看起來解決了我。如果你根據正則表達式開始了一個更新的問題並展示你之前完成的一些工作。

+0

謝謝你的回答。但我必須學會編輯比賽價值。 $ 1正在獲得完整的地址。我想編輯$ 1例如matched_value.Substring(0,5)什麼是正確的方式? 第二個問題:www.google.com網址找到並由您的代碼替換,但該鏈接沒有http。所以當我點擊鏈接時,它會顯示mydomain.com/www.google.com如何添加與http的鏈接 –

+0

你想用'http:// www.google.de'替換'www.google.de'?我將編輯我的問題並解釋組標題。 – C4u

+0

感謝您的有用答案。我會用你的建議更新我的代碼。 –

相關問題