c#使用正则表达式查找并替换字符串中的url

End*_*ric 3 c# regex asp.net

我想用 www.google.com 替换 url 例如 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>");
Run Code Online (Sandbox Code Playgroud)

它正在使用,http://www.google.com但无法使用,www.google.com或者subdomain.google.com哪个正则表达式代码与每个 url 链接匹配。例如,当我写一个长链接时,它会写出与 url 相同的内容

http://www.google.com/search/asdadad/sdsdsd/sadasdx-sadasd-weqeqwe-zxcxzc.com
Run Code Online (Sandbox Code Playgroud)

. 我想把它写成

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

做这个的最好方法是什么?我是正则表达式的新手

C4d*_*C4d 6

这也将捕获www.test.com

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

只需将可选的部分括起来并附加一个问号。你可以在这里查看。


此正则表达式中的第一个匹配项(匹配项用“(”和“)”定义)是整个 url。所以你可以像这样使用替换:

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

在此处输入图片说明

我用过的地方$1你也可以使用$2 - $5. 检查上面显示哪些组正在捕获 url 的哪个部分的图像。

完整的测试可以在 这里找到
只需单击顶部的执行

输出: 在此处输入图片说明


根据评论,组标题的工作原理:

Text: "this is your text to search"  
Pattern: "text to"
Run Code Online (Sandbox Code Playgroud)

Match[0] 将始终匹配您的整个 match 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"  
Run Code Online (Sandbox Code Playgroud)

带有“()”的标题从外到内起作用。

$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;\/~\+#])?)
                                              ?--------------------------------------------------?   
Run Code Online (Sandbox Code Playgroud)

我无法在这里解释有关正则表达式的所有内容。这个问题对我来说似乎解决了。如果您根据正则表达式有更深层次的问题,请开始一个新问题并展示您之前所做的一些努力。