c#用正则表达式从字符串中查找和替换url

时间:2016-04-16 07:10:34

标签: c# asp.net regex

我想用www.google.com替换网址,例如www.google.com或http://www.google.com我有一个代码

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 个答案:

答案 0 :(得分:2)

这也会抓住www.test.com

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

只围绕可选的部分并添加问号。 您可以查看here.

此正则表达式中的第一个匹配(匹配用&#34;(&#34;和&#34;)&#34;)定义是整个网址。所以你可以像这样使用替换:

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。检查上面的图像,显​​示哪些组正在捕获网址的哪一部分。

可以找到完整的测试 here 只需点击顶部的执行即可。

输出: enter image description here

根据评论,群组标题如何运作:

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

匹配[0]将始终与您的整个匹配text to匹配。上述Match[1]Match[2]以上的每个群组都必须使用&#34;(&#34;和&#34;)&#34;来定义。

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"  

标题为&#34;()&#34;从外到内工作。

$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;\/~\+#])?)
                                              ↑--------------------------------------------------↑   

我在这里无法解释有关正则表达式的所有内容。这个问题看起来很适合我。如果您根据正则表达式获得了更深层次的问题,请启动一个新问题,并展示您之前已做过的一些努力。