Вы говорите, что хотите вложить всю электронную почту и URL-адреса, которые находятся внутри строки - вы имеете в виду цитату? Если так, то что-то подобное сделает трюк. Он распознает электронные письма и URL-адреса. Поскольку мы предполагаем, что строка задает длину адреса электронной почты/URL-адреса, то регулярные выражения преднамеренно неактивны - попытка быть слишком специфичной здесь может означать, что некоторые лигитиматические случаи не сопоставляются.
public string LinkQuotedEmailsAndURLs(string email)
{
Regex toMatch = new Regex("((https?|ftp)?://([\\w+?\\.\\w+])+[^ \"]*)|\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", RegexOptions.IgnoreCase);
MatchCollection mactches = toMatch.Matches(email);
foreach (Match match in mactches) {
email = email.Replace(match.Value, "<a href=" + match.Value + ">" + match.Value.Substring(1,match.Value.Length-2) + "</a>");
}
return email;
}
Это не ясно, если исходный текст содержит фактические URL-закодированные URL, или «презентабельный» URL-декодируется формы. Вы можете использовать HttpUtils.UrlEncode/UrlDecode в значении соответствия, чтобы гарантировать, что встроенный href закодирован, в то время как представленная строка декодируется, поэтому href включает в себя «% 20», но они отображаются как обычные символы в тексте ссылки.
E.g. если текст уже присутствует, это действительный URL-адрес, вы можете использовать
email = email.Replace(match.Value, "<a href=" + match.Value + ">" +
HttpUtils.UrlEncode(match.Value.Substring(1,match.Value.Length-2)) + "</a>");