我正在尝试用锚标记替换所有出现的URL。
我可以对大多数URL字符执行此操作,但是当URL中包含(
和)
时,代码就会中断。
例如。
https://example.com/Heavy-Industry/Global-Perfluorosulfonic-Acid-(PFSA)-Market-Status-By-Manufacturers,-Types-And-Application,-History-And-Forecast-2025#sample
这是我的代码:
protected string MakeLink(string text)
{
string text2 = Regex.Replace(text,
@"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)",
"<a target='_blank' href='$1'>$1</a>");
return text2;
}
答案 0 :(得分:1)
您应该将括号添加到字符类[\w\-.,@?^=%&:/~+#()]
如果您不使用捕获组,那么我认为可以通过使用单个捕获组进行替换来使正则表达式更加紧凑。
请注意,您不必在字符类中转义点和加号。
((?:https?|ftp):\/\/[\w\-_]+(?:\.[\w\-_]+)+(?:[\w\-.,@?^=%&:/~+#()]*[\w\-@?^=%&/~+#])?)