我目前正在 pre 标签内显示一个字符串的内容,但是我必须详细说明一个函数,对于每个链接进入字符串用链接标签替换它,我尝试了几个字符串替换和正则表达式方法,但没有人工作。
string myString = "Bla bla bla bla http://www.site.com and bla bla http://site2.com blabla"
//Logic
string outputString = "Bla bla bla bla <a href="http://www.site.com" target="blank">http://www.site.com</a> and bla bla <a href="http://site2.com" target="blank">http://site2.com</a> blabla"
我使用了以下代码,但它并不适用于每个网址:
string orderedString = item.Details.Replace("|", "\n" );
string orderedStringWithUrl = "";
System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.MatchCollection mactches = regx.Matches(orderedString);
foreach (System.Text.RegularExpressions.Match match in mactches)
{
orderedStringWithUrl = orderedString.Replace(match.Value, "<a href='" + match.Value + "' target='blank'>" + match.Value + "</a>");
}
有什么建议吗?
更新: 我注意到我在字符串中的URL都没有空格,所有都以http或https开头。 这是一个想法,一个以http或https开头到(并且不包括在第一个空间)的所有内容?在那种情况下,我如何使用.replace来实现这一目标?
提前Tnx。答案 0 :(得分:1)
在我使用此标记的示例中
<body>
<form id="form1" runat="server">
<div>
<asp:Literal ID="litTextWithLinks" runat="server" />
</div>
</form>
</body>
以及代码隐藏
private const string INPUT_STRING = "Bla bla bla bla http://www.site.com and bla bla http://site2.com blabla";
protected void Page_Load ( object sender, EventArgs e ) {
var outputString = INPUT_STRING;
Regex regx = new Regex( @"https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?", RegexOptions.IgnoreCase );
MatchCollection mactches = regx.Matches( INPUT_STRING );
foreach ( Match match in mactches ) {
outputString = outputString.Replace( match.Value, String.Format( "<a href=\"{0}\" target=\"_blank\">{0}</a>", match.Value ) );
}
litTextWithLinks.Text = outputString;
}
对于样本中所有正确替换为在新浏览器窗口中打开的链接的URL。
您可以通过执行WebRequest来测试URL,只有在打开成功时才进行替换。如果并非所有网址都匹配,那么您可能需要更改正则表达式。
如果这不能回答您的问题,您应该添加更多细节。
答案 1 :(得分:0)