这也会捕获www.test.com:
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑---------------------↑↑
只需将可选的部分括起来并附加一个问号。
你可以去看看here.
这个正则表达式中的第一个匹配项(匹配项用“(”和“)”定义)是整个 url。所以你可以像这样使用替换:
Regex rgxUrls = new Regex(pattern);
string result = rgxUrls.Replace(yourText, "<a href=\"$1\"> space for custom text </a>");
↑ Inserts first match
在我使用$1 的地方,您也可以使用$2 - $5。检查上面的图片,显示哪些组正在捕获 url 的哪一部分。
可以找到完整测试 here.
只需点击顶部的执行。
输出:
根据 cmets,组标题的工作原理:
Text: "this is your text to search"
Pattern: "text to"
Match[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\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑--------------------------------------------------------------------------------------------------↑
$2 (http://)
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑---------------------↑
$3 (http)
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑--------------↑
$4 (.com)
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑----------↑
$5 (/appendedSubdirectory/anotherOne)
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑--------------------------------------------------↑
我无法在这里解释有关正则表达式的所有内容。这个问题看起来对我来说已经解决了。如果您根据正则表达式有更深层次的问题,请开始一个新问题并展示您之前所做的一些努力。