Получить URL из HTML-кода, используя регулярное выражение - PullRequest
1 голос
/ 30 ноября 2009

Рассмотрим:

<div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>

Какое регулярное выражение нужно получить http://anirudhagupta.blogspot.com/ из следующего?

<div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>

Если вы предлагаете что-то в C #, это хорошо. Мне также нравится jQuery, чтобы сделать это.

Ответы [ 5 ]

1 голос
/ 30 ноября 2009

Если вы хотите использовать jQuery, вы можете сделать следующее.

$('a').attr('href')
0 голосов
/ 30 ноября 2009

Правильный способ сделать это - загрузить HTML в синтаксический анализатор C # XML, а затем использовать XPath для запроса URL-адресов. Таким образом, вам не нужно беспокоиться о разборе.

0 голосов
/ 30 ноября 2009

Вам не нужно сложное регулярное выражение или анализатор HTML, поскольку вы хотите только извлечь ссылки. Вот общий способ сделать это.

data="""
<html>
abcd ef ....
blah blah <div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>
blah  ...
<div><a href="http://mike.blogspot.com/">Mike's Web blog
</a></div>
end...
</html>
"""    
for item in data.split("</a>"):
    if "<a href" in item:
        start_of_href = item.index("<a href") # get where <a href=" is
        print item[start_of_href+len('<a href="'):] # print substring from <a href onwards. 

Выше приведен код Python, но идея, лежащая в основе, может быть адаптирована на вашем языке C #. Разделите вашу строку HTML, используя "</a>" в качестве разделителя. Пройдите через каждое поле разделения, проверьте на "href", затем получите substr после "href". Это будут ваши ссылки.

0 голосов
/ 30 ноября 2009

Самый простой способ сделать это - использовать следующее регулярное выражение.

/href="([^"]+)"/

Это будет получать все символы из первой цитаты, пока не найдет символ, который является цитатой. В большинстве языков это самый быстрый способ получить строку в кавычках, которая сама по себе не может содержать кавычек. Кавычки должны быть закодированы при использовании в атрибутах.

ОБНОВЛЕНИЕ : Полная программа Perl для анализа URL-адресов будет выглядеть следующим образом:

use 5.010;

while (<>) {
    push @matches, m/href="([^"]+)"/gi;
    push @matches, m/href='([^']+)'/gi;
    push @matches, m/href=([^"'][^>\s]*)[>\s]+/gi;
    say for @matches;
}

Он читает со стандартного ввода и печатает все URL. Он заботится о трех возможных цитатах. Используйте его с curl, чтобы найти все URL на веб-странице:

curl url | perl urls.pl
0 голосов
/ 30 ноября 2009

Быстро и грязно:

href="(.*?)"

Хорошо, давайте рассмотрим еще одно регулярное выражение для разбора URL. Это происходит из RFC 2396 - Общий синтаксис URI: анализ ссылки на URI с помощью регулярного выражения

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

Конечно, вы можете иметь относительный URL-адрес в своем HTML-коде, вам нужно будет обратиться к ним по-другому; Я могу рекомендовать вам использовать C # Uri Constructor (Uri, String).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...