Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/39: Рейтинг темы: голосов - 39, средняя оценка - 4.54
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30

boost/regex Поиск ссылок в html-файле

02.04.2012, 15:33. Показов 7836. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел вот такой код:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
#include <boost/regex.hpp>
#include <fstream>
 
using namespace std;
const int BUFSIZE = 10000;
 
int main(int argc, char** argv) {
 
   // Safety checks omitted...
   boost::regex re("<a\\s+href=\"([\\-:\\w\\d\\.\\/]+)\">");
   string file(argv[1]);
   char buf[BUFSIZE];
   boost::cmatch matches;
   string sbuf;
   string::const_iterator begin;
   ifstream in(file.c_str());
 
   while (!in.eof())
   {
      in.getline(buf, BUFSIZE-1);
      sbuf = buf;
      begin = sbuf.begin();
 
      while (boost::regex_search(begin, sbuf.end(), matches, re))
      {
         string url(matches[1].first, matches[1].second);
         cout << "URL: " << url << endl;
         // Update the beginning of the range to the character
         // following the match
         begin = matches[1].second;
      }
   }
}

http://onlamp.com/pub/a/onlamp... ntent=text

Методом тыка и сравнением с документацией получилось преобразовать в
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//----------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
  system("chcp 1251");
   //boost::regex re("<a\\s+href=\"([\\-:\\w\\d\\.\\/]+)\">");   // 291 -запись
   boost::regex re("<a\\s+href=\"([\\-:\\w\\d\\.\\/]+)\">(([\\w+\\-+\\d+\\.\\s+])+)</a>"); // 236- записей
 
   string file("10.html"); // html -файл сохраненной главной страницы [url]https://www.cyberforum.ru[/url]
 
   boost::match_results<std::string::const_iterator> matches;
 
   string sbuf;
 
   ifstream in(file.c_str());
   unsigned n=0;
   while (!in.eof())
   {
      getline(in,sbuf);
 
      std::string::const_iterator begin, end;
      begin = sbuf.begin();
      end = sbuf.end();
 
    while(boost::regex_search(begin,end, matches, re))
      {
         string url(matches[1].first, matches[1].second);
         string name(matches[2].first, matches[2].second);
         cout<<n<< ".  URL: " << url <<"  "<<name<<endl;
         n++;
         begin = matches[1].second;
      }
   }
system("pause");
return 0;
}
//---------------------------------------------------------
Непонятно почему не работает с boost::cmatch matches;
А также возникли с затруднением составлением регуляного выражения для имени ссылки

boost::regex re("<a\\s+href=\"([\\-:\\w\\d\\.\\/]+)\">(([\\w+\\-+\\d+\\.\\s+])+)</a>");

(К примеру <a href="https://www.cyberforum.ru/members/172450.html">zek921</a> )

под него не попадают некоторые ссылки
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2012, 15:33
Ответы с готовыми решениями:

Boost::regex, как правильно парсить HTML
Всем доброго времени суток. В общем проблема возникла с получением значений из html кода. Записываю в char текст такого содержания: ...

Парсинг html кода с использованием регулярных выражений (в частности boost.regex)
Вечер добрый, уважаемые форумчане! В общем то тема избитая, читал я по ней много, но из темы в тему - только какие то второстепенные...

Поиск ссылок в HTML файле
Здравствуйте! Возникла такая задача: на вход поступает url, идет по нему переход, в полученной странице(в виде HTML) ищутся все...

6
 Аватар для igorrr37
2869 / 2016 / 991
Регистрация: 21.12.2010
Сообщений: 3,720
Записей в блоге: 15
05.04.2012, 05:49
используй non greedy repeats (+?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <fstream>
#include <iterator>
#include <boost/regex.hpp>
 
int main()
{
    std::ifstream ifs("C:/Downloads/1.htm");
    if(ifs.is_open())
    {
        std::string s((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
        const char* p = s.c_str(), *pEnd = p + s.size();
        boost::cmatch res;
        boost::regex reg("<a +href=\".+?\">.+?</a>");
        std::size_t cntr = 0;
        for(cntr = 0; boost::regex_search(p, pEnd, res, reg); p = res[0].second)
        {
            ++ cntr;
        }
        std::cout << cntr << std::endl;
    }
    else std::cerr << "Can't open file\n";
    ifs.close();
    return 0;
}
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 16:46  [ТС]
Не находит вариант с
Code
1
2
3
4
<a rel="nofollow" href="http://www.liveinternet.ru/click"
target=_blank><img src="http://counter.yadro.ru/logo?21.1"
title="LiveInternet: показано число просмотров и посетителей за 24 часа"
alt="" border=0 width=88 height=31></a>
http://regexpr.ru/?pattern=%2F... %3C%2Fa%3E
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.05.2012, 23:14  [ТС]
А чем в чем смысл не жадных выражений?
Например строка "aaabcfrhagyukaalkl",а регулярка "a+?", но такая запись равносильна "a"

Добавлено через 3 часа 3 минуты
Долго не мог найти подходящие выражение по тому как исользовал .* а под него не попадает \n который закрался в разбираемом тексте
В итоге получил
Code
1
"<a.*href=\"(.*)\".*>(.*)<\/a>"
http://regexpr.ru/?pattern=%2F... %3C%2Fa%3E
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
24.10.2012, 22:08
Я уже сделал то только теперь у меня в стринглисте вот что
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
IV 
VK 1602 Leopard
IV 
А-20
IV 
Т-50
V 
Т-50-2
VIII 
Lowe
V 
VK 2801
V 
T-34
V 
M4 Sherman
VII 
Jagdpanther
Надо сделать:
VK 1602 Leopard //IV

А-20 //IV

Т-50 //IV

Т-50-2 //V
и т.д
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.10.2012, 23:33  [ТС]
Для темы Обрезать строки
Вложения
Тип файла: rar 0.rar (336.2 Кб, 77 просмотров)
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
25.10.2012, 07:13
Цитата Сообщение от Avazart Посмотреть сообщение
Спасибо извиняюсь не в ту тему написал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2012, 07:13
Помогаю со студенческими работами здесь

Поиск ссылок на изображение в html файле
Всем привет! Перед мной стоит такая задача: Имеется сохраненная веб страница html, нужно найти там ссылки формата...

Boost regex поиск в массиве
Ффф, мне надо на boost regex искать все совпадения в массиве и выдавать в масиив. Прототип функции не придумал. Пока что. Но, думаю идеи...

Найти текст между открывающим и закрывающим тегом в html (boost::regex)
Собственно сабж. Как должно при этом выглядеть регулярное выражение? Нужно именно найти текст не просто между &lt;tag&gt; и...

Поиск в текстовом файле с html-кодом или css-кодом и вывести список всех ссылок
help. Как вообще работает и как вообще мне заставить ориентировать прогу в файле именно за этими ссылками. :(

Поиск в файле через regex
Делаю поиск выражения в большом файле, файл неструктурированный маска вводиться в textbox правильно я делаю? Код ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru