2016-04-16 92 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

感谢您的有用答案。我会用你的建议更新我的代码。 –

相关问题