gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:55:36 26 4
gpt4 key购买 nike

我想用 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>");

它与 http://www.google.com 一起工作,但它不与 www.google.comsubdomain.google.com 一起工作,正则表达式代码与每个 url 链接匹配。例如,当我写一个长链接时,它会写出与 url 相同的内容
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>
做这个的最好方法是什么?我是正则表达式的新手

最佳答案

这也将捕获 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"

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\-\.,@?^=%&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;\/~\+#])?)
↑--------------------------------------------------↑

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

关于c#使用正则表达式查找并替换字符串中的url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com