Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C# RegExp

9.0K
29 сентября 2009 года
t-34
129 / / 30.11.2007
Смысл: соединяюсь с сервером, беру страницу. Надо спарсить все ссылки оттуда (то есть конкретные адреса, http://somelink.com/somepage.html или http://somelink.com/somepage.php или http://somelink.com/somepage.aspx).
Как делаю:
 
Код:
MatchCollection result = Regex.Matches(content, @"^(http)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$");

В итоге получаю все ссылки, даже на картинки. Пытаюсь установить фильтр на расширение и получаю в итоге вобще ноль совпадений :(
5
29 сентября 2009 года
hardcase
4.5K / / 09.08.2005
Написал сходу такую регулярку:
 
Код:
Regex regex = new Regex(@"http://([\w\-\.\s""]+/?)+",
                RegexOptions.IgnoreCase | RegexOptions.Compiled);
Затем отфильтровать по завершающему .jpg, .png, .gif и прочему, что придет на ум (String.EndsWith еще никто не отменял). Для пущей валидации ссылок можно попробовать создать экземпляр Uri (метод Uri.TryCreate) - он гарантированно проверит корректность распознавания ссылок.
9.0K
29 сентября 2009 года
t-34
129 / / 30.11.2007
Ага, спасибо за совет! Я вчера докрутила-таки до рабочего состояния регулярку, если интересно, получилась вот такая штука:
 
Код:
MatchCollection result = Regex.Matches(content, @"(http)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*(\.[phtmlasx]{2,4})", RegexOptions.Multiline | RegexOptions.IgnoreCase);

Сейчас эта штука выбирает все ссылки, расширение у которых php, asp, aspx, html, htm. Теперь надо прикрутить, чтобы также парсились ссылки со строкой запроса, например, http://somesite.com/somepage.php?somevar=someval
9.0K
29 сентября 2009 года
t-34
129 / / 30.11.2007
Еще момент, может, подскажите.
Вот это выражение

MatchCollection result = Regex.Matches(content, @"(http)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*(\.[phtmlasx]{2,4})([\?])?([0-9a-z_!~*'().;\?:@&=+$,%#\-])*", RegexOptions.Multiline | RegexOptions.IgnoreCase);


выбирает адреса такого типа, как http://somesite.com/somepage.php?somevar=someval
но, есть одно большое но: если задать адрес без хоста, то есть просто somepage.php?somevar=someval, то он игнорируется. Как надо подправить выражение, может, подскажите?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог