Нужно заменить все ссылки в тексте на тег <a href=""></a>. При этом не нужно менять ссылки, которые являются атрибутами тегов (например: <a href="http:// toster. ru/">Тостер</a> или <img src="http:// mysite. com/photo.jpg" />). (пробелы поставил т. к. Тостер врубает свой интеллект)
Пример текста:
Принцип восприятия http://google.ru непредвзято создает www.ya.ru
паллиативный интеллект, support@rambler.ru условно. Концепция
<a href="http://mail.ru">ментально</a> оспособляет
<img src="http://bing.com/images/01.jpg" /> закон внешнего мира.
Результат:
Принцип восприятия <a href="https://google.ru/">https://google.ru</a>
непредвзято создает <a href="http://www.ya.ru/">www.ya.ru</a>
паллиативный интеллект, support@rambler.ru условно. Концепция
<a href="http://mail.ru">ментально</a> оспособляет
<img src="http://bing.com/images/01.jpg" /> закон внешнего мира.
Сейчас в наличие «правдоподобный» код, который отрабатывает замену ссылок, но не знаю ка его переделать, чтобы игнорировались ссылки в атрибутах (не силен в регексах).
private static Regex regExHttpLinks = new Regex(@"(?<=\()\b(https?://|www\.)[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|](?=\))|(?<=(?<wrap>[=~|_#]))\b(https?://|www\.)[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|](?=\k<wrap>)|\b(https?://|www\.)[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static string ParseHtml(this string source)
{
if (string.IsNullOrEmpty(source))
return source;
var periodReplacement = "[[[replace:period]]]";
source = Regex.Replace(source, @"(?<=\d)\.(?=\d)", periodReplacement);
var linkMatches = regExHttpLinks.Matches(source);
foreach (Match match in linkMatches)
{
var m = match.ToString();
string s = (m.Contains("://")) ? m : "http://" + m;
source = source.Replace(m,
String.Format("<a href=\"{0}\" title=\"{0}\">{1}</a>",
s.Replace(".", periodReplacement).ToLower(),
m.Replace(".", periodReplacement)));
}
source = source.Replace(periodReplacement, ".");
return source;
}