Регулярное выражение для ссылки
От: Смирнов Алексей Россия  
Дата: 20.03.11 15:33
Оценка:
Есть файл, там куча html ссылок. Нужно вытащить из них URL

<a href="http://www.rsdn.ru/Forum/" target="_blank">Форум</a>

Нужно вытащить http://www.rsdn.ru/Forum/

Вот что нарыл из регулярного выражения

Regex regex = new Regex(@"(\b\w+:\/\/\w+((\.\w)*\w+)*\.\w{2,3}(\/\w*|\.\w*|\?\w*\=\w*)*)");



Но проблема в том, что она как то порой не правилно работает, тире вроде режет. Как его попроще написать на проверку?
Что бы было, что то типа

<a href="(.*)"


Почему кстати так не работает то?

Regex regex = new Regex("<a href=\"(.*)\"");
Re: Регулярное выражение для ссылки
От: vf  
Дата: 20.03.11 16:44
Оценка:
СА>Почему кстати так не работает то?

Потому что точка жадная.

<a href="([^"]*)"
Re: Регулярное выражение для ссылки
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.03.11 17:45
Оценка:
Здравствуйте, Смирнов Алексей, Вы писали:

СА>
СА><a href="(.*)"
СА>


СА>Почему кстати так не работает то?


А еще может быть
<a target="_blank" href="http://www.rsdn.ru/Forum/">Форум</a>
Re[2]: Регулярное выражение для ссылки
От: Смирнов Алексей Россия  
Дата: 20.03.11 17:51
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Смирнов Алексей, Вы писали:


СА>>
СА>><a href="(.*)"
СА>>


СА>>Почему кстати так не работает то?


S>А еще может быть

S>
S><a target="_blank" href="http://www.rsdn.ru/Forum/">Форум</a>
S>


Кстати да, может и так. Но парситься страница, где точно как я написал.


<a href="([^"]*)"


Заработало, спасибо.


Подскажите, а вот если уже есть ссылки
http://www.rsdn.ru/Forum/
http://www.rsdn.ru/Forum/blabla
Как вытащить домен?

http://([^\"]*)/



Не хочет так работать. Некоторые урлы нормально, а некоторые не трогает...
Re: Регулярное выражение для ссылки
От: baranovda Российская Империя  
Дата: 20.03.11 17:52
Оценка: +1
Здравствуйте, Смирнов Алексей, Вы писали:

СА>Почему кстати так не работает то?


СА>
СА>Regex regex = new Regex("<a href=\"(.*)\"");
СА>


new Regex("<a href=\"(.*?)\"");

А вообще есть куча ньюансов. В книжке Mastering Regular Expressions автор приводит пример регулярного выражения для адресов электронной почты в полном соответствии с RFC — там чего-то страниц 6 мелким шрифтом. В случайх посложнее URL может быть заключен в одинарные кавычки, быть относительным или включать национальные симфолы.
Re[3]: Регулярное выражение для ссылки
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.03.11 18:00
Оценка:
Здравствуйте, Смирнов Алексей, Вы писали:

СА>Здравствуйте, samius, Вы писали:


СА>Подскажите, а вот если уже есть ссылки

СА>http://www.rsdn.ru/Forum/
СА>http://www.rsdn.ru/Forum/blabla
СА>Как вытащить домен?

Вытащить полный URL и создать System.Uri(string) . Из него вытащить все что нужно.
Re[4]: Регулярное выражение для ссылки
От: Смирнов Алексей Россия  
Дата: 20.03.11 18:32
Оценка:
S>Вытащить полный URL и создать System.Uri(string) . Из него вытащить все что нужно.
Ах, ну да, совсем забыл.


new Regex("<a href=\"(.*?)\"");

Спасибо, заработало.


А вообще есть куча ньюансов.

Согласен, но тут я парсю как бы ссылки под одну гребёнку, поэтому тут упростилось всё.
Re: Регулярное выражение для ссылки
От: ZAMUNDA Земля для жалоб и предложений
Дата: 20.03.11 23:40
Оценка:
Здравствуйте, Смирнов Алексей, Вы писали:

СА>Есть файл, там куча html ссылок. Нужно вытащить из них URL

Файл-то HTML или как?

СА>
СА><a href="http://www.rsdn.ru/Forum/" target="_blank">Форум</a>
СА>

СА>Нужно вытащить http://www.rsdn.ru/Forum/
Я, при парсинге ХТМЛ, вначале вытащиваю сам тег '<a href="http://www.rsdn.ru/Forum/" target="_blank">', а потом вытащиваю параметры со значениями, вот такой штуковиной:
(\w+)(?:=([\+\-\w]*)[>\s]|="([^\n\r"]*)")
Естессно значение во второй или в третьей группе будет — так что надо немного пошуршать.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: Регулярное выражение для ссылки
От: Смирнов Алексей Россия  
Дата: 21.03.11 22:41
Оценка:
Народ, подскажите, а как мне вытащить HTML код-текст из Дива?

<div class="text">
...
А тут какой то код, текст, куча энтеров и пробелов
...
</div>

Нужно то, что в этом диве, с классом text.
Вот это работать не хочет

new Regex("<div class=\"text\">(.*?)</div>");
new Regex("<div class=\"text\">([^\"]*)</div>");
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.