Регулярное выражение для анализа гиперссылок и описаний

C#: Что такое хорошее регулярное выражение для анализа гиперссылок и их описания?

Пожалуйста, учитывайте нечувствительность к регистру, пробелы и использование одинарных кавычек (вместо двойных кавычек) вокруг тега HREF.

Также рассмотрите возможность получения гиперссылок с другими тегами в тегах <a>, например <b> и <i>. Взаимодействие с другими людьми

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
4
0
11 504
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

я нашел это, но, видимо, у эти парни были проблемы с этим.

Обновлено: (Оно работает!)
Я провел собственное тестирование и обнаружил, что он работает, я не знаю C#, поэтому я не могу дать вам ответ на C#, но я знаю PHP, и вот массив совпадений, который я получил после запуска его на этом:

<a href = "pages/index.php" title = "the title">Text</a>

array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" } 
Ответ принят как подходящий

Пока нет вложенных тегов (и без разрывов строк), следующий вариант работает хорошо:

<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>

Как только в игру вступают вложенные теги, регулярные выражения становятся непригодными для синтаксического анализа. Однако вы все равно можете использовать их, применяя более продвинутые функции современных интерпретаторов (в зависимости от вашей машины регулярных выражений). Например. Регулярные выражения .NET используют стек; Я нашел это:

(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>) 

Источник: http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx

Я есть регулярное выражение, который обрабатывает большинство случаев, хотя я считаю, что он соответствует HTML в многострочном комментарии.

Он написан с использованием синтаксиса .NET, но должен легко переводиться.

См. Этот пример из StackOverflow: регулярное выражение для анализа ссылок с веб-страницы?

Используя Пакет HTML Agility, вы можете анализировать html и извлекать детали, используя семантику HTML, вместо сломанного регулярного выражения.

Точно - регулярные выражения - это здорово, но их использование в HTML или XML - рецепт боли.

slim 19.09.2008 13:15

+1 за HTML Agility Pack. Кто-то недавно предложил мне это, и это прекрасно сработало.

mpen 10.12.2009 06:25

Просто собираюсь выбросить этот фрагмент сейчас, когда он у меня работает ... это менее жадная версия одного из предложенных ранее. Оригинал не работал бы, если бы на входе было несколько гиперссылок. Этот код ниже позволит вам перебрать все гиперссылки:

static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
   MatchCollection mcHref = rHref.Matches(html);

   foreach (Match m in mcHref)
      AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}

Вот регулярное выражение, которое будет соответствовать сбалансированным тегам.

(?: "" '[""']. *?>) (? (?> (?) | (?) |.) +) (? (ГЛУБИНА) (?!)) (? :)

Другие вопросы по теме