我想用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.com
或subdomain.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>
最好的方法是什么?我是正则表达式的新手
答案 0 :(得分:2)
这也会抓住www.test.com
:
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)
↑---------------------↑↑
只围绕可选的部分并添加问号。 您可以查看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
在我使用$1
的地方,您也可以使用$2 - $5
。检查上面的图像,显示哪些组正在捕获网址的哪一部分。
可以找到完整的测试 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\-\.,@?^=%&:\/~\+#]*[\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\-\@?^=%&\/~\+#])?)
↑--------------------------------------------------↑
我在这里无法解释有关正则表达式的所有内容。这个问题看起来很适合我。如果您根据正则表达式获得了更深层次的问题,请启动一个新问题,并展示您之前已做过的一些努力。