Я пытаюсь найти регулярное выражение и перепробовал множество комбинаций и искал решение, чтобы найти решение для преобразования не гиперссылочных адресов в гиперссылки.
е
http://twitpic.com/abcdef http://www.smh.com.au askjhsd www.hotmail.com ks sd
<a href="http://www.aaaaaaaa.com">aaaaaaaa</a>
Я хочу, чтобы были подобраны http://twitpic.com/abcdef
, http://www.smh.com.au
и www.hotmail.com
, но не http://www.aaaaaaaa.com
, поскольку он уже обернут вокруг тега <a>
.
В настоящее время я использую это регулярное выражение в C #
return Regex.Replace(input, @"(\b((http|https)://|www\.)[^ ]+\b)",
@" <a href=""$0"" target=""_blank"">$0</a>", RegexOptions.IgnoreCase);
Я понятия не имею, как сделать так, чтобы исключить вещи, уже завернутые в <a>
или <img>
Справка:)
EDIT
Для тех, кто читает это позже, это последнее решение, которое я придумал
/// <summary>
/// Adds to the input string a target=_blank in the hyperlinks
/// </summary>
public static string ConvertURLsToHyperlinks(string input)
{
if (!string.IsNullOrEmpty(input))
{
var reg = new Regex(@"(?<!<\s*(?:a|img)\b[^<]*)(\b((http|https)://|www\.)[^ ]+\b)");
return reg.Replace(input, new MatchEvaluator(ConvertUrlsMatchDelegate));
}
return input;
}
public static string ConvertUrlsMatchDelegate(Match m)
{
// add in additional http:// in front of the www. for the hyperlinks
var additional = "";
if (m.Value.StartsWith("www."))
{
additional = "http://";
}
return "<a href=\"" + additional + m.Value + "\" target=\"_blank\">" + m.Value + "</a>";
}