Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/30: Рейтинг темы: голосов - 30, средняя оценка - 4.50
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259

Парсер boost/regex

06.12.2012, 19:52. Показов 6428. Ответов 13

Студворк — интернет-сервис помощи студентам
Всем привет вот возникла сложно с boost/regex начну по порядку.
Написав достаточное количество парсеров информации из интернета я понял что не все можно спарсить с помощью .Pos() .SubString() и т д.
Почитав не много решил boost/regex мне в помощь.
Искал инфу но внятно под установленный boost/regex в с++ builder 2009 не нашел т.е хочу изучить сам синтаксис, а то не понятно что все эти \ да .*? значат.
Ну и конкретный вопрос делаю парсер прокси серверов со странички нашел вроде готовый пример регулярки но не для с++.
Вот набросал код получаю только 173
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <a.hpp>
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
std::string get_gid(std::string json)
{
    using namespace boost;
    smatch m;
    regex re("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}):([0-9]{1,5})");
 
    if( regex_search(json,m,re) )  return m[1];
    return "Не найдено";
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
String lol="312313123123123123 173.45.97.93:1080";
Memo1->Text=get_gid(lol.c_str()).c_str();
}
//--------------------------------------------------------------------------
Не надо только кричать что я плохо искал инфы полно и т д.
Читал кучу тем с этого форума мне не нужны примеры я хочу изучить синтаксис подскажите хороший сайт можно на английском.
Всем спасибо за ранее.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2012, 19:52
Ответы с готовыми решениями:

Boost/regex вывод нескольких значений
Здравствуйте, сегодня познакомился с regex и столкнулся с такой проблемой, как вывести несколько значений с сайта? Там имеется таблица с ip...

Boost/regex составление регулярного выражения
Друзья сижу прошу у вас помощи, решил решил попробовать научится использовать регулярные выражения установил библиотеку все как положено но...

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

13
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.12.2012, 03:21
Смотри доку в pdf- формате к данной версии boost
Ну собственно http://www.boost.org/doc/libs/... index.html

Насчет самих выражений так смотри синтаксис регулярок из языка Perl или синтаксис Posix

Добавлено через 4 минуты
C++
1
 regex re("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}):([0-9]{1,5})");
тут походу двойные слеши должны быть "\\." один для экранирования в "самой регулярке", а второй для языка С++

Добавлено через 53 минуты
Собственно если не вникать в тонкости самого boost :

http://citforum.ru/internet/perl_tut/re.shtml
http://citforum.univ.kiev.ua/internet/perl/regexp/
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
07.12.2012, 19:22  [ТС]
Так вроде с парсером прокси разобрался только как получить все прокси со страницы=) Я думаю как то в цикл загнать.
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
37
38
39
40
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <boost/regex.hpp>
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
std::string get_gid(std::string json)
{
    using namespace boost;
    smatch m;
    regex re("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}):([0-9]{1,5})");
 
    if( regex_search(json,m,re) )  {
       std::string str(m[0].first, m[0].second);
    return str; }
 
 
 
    return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
String lol;
lol=Form2->IdHTTP1->Get("http://2freeproxy.com/wp-content/plugins/proxy/load_proxy.php");
String ml=   get_gid(lol.c_str()).c_str();
Memo1->Text=ml;
}
//---------------------------------------------------------------------------
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.12.2012, 19:26
Ну так они в
C++
1
smatch m;
Хранятся ... по индексам доступ...
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
08.12.2012, 16:26  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так они в
C++
1
smatch m;
Хранятся ... по индексам доступ...
Эм не очень тебя понял std::string str(m[0].first, m[0].second); выводит все что он нашел как я понял
а std::string str(m[1].first, m[1].second); (m[2].first, m[2].second); и т д куски какие то =)
Посмотри пример выше там есть страничка где адреса прокси мне надо собрать все их, а не только 1.
Спасибо за помощь!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.12.2012, 23:33
C++
1
2
3
std::string str1 = m[1];
std::string str2 = m[2];
// ...
Добавлено через 1 час 12 минут
Каждый m[n] соответствует подвыражению, т.е. тому что взято в скобки.
m[0] соответствует всему выражению
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
09.12.2012, 11:10  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
std::string str1 = m[1];
std::string str2 = m[2];
// ...
Добавлено через 1 час 12 минут
Каждый m[n] соответствует подвыражению, т.е. тому что взято в скобки.
m[0] соответствует всему выражению
Я уже это понял я просто хочу понять есть у меня страница
PHP
1
219.139.70.115:6868<br>199.88.246.77:8080<br>107.144.55.84:3128<br>234.112.199.70:3128<br>209.177.187.137:6868<br>111.120.182.79:3128<br>174.243.73.240:6868<br>159.92.216.159:6868<br>107.201.51.142:3128<br>117.191.229.124:8000<br>150.145.238.97:3128<br
Достать все адреса надо.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.12.2012, 13:12
В помощь:

http://regexpr.ru/
http://regexpr.ru/cheatsheet/
1
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
09.12.2012, 18:19  [ТС]
А вот с такой проблемой не поможете
Сайт с прокси http://fineproxy.org/%D1%81%D0... B8/#more-6
C++
1
2
3
4
5
6
Form2->Memo1->Text=Form2->IdHTTP1->Get("http://fineproxy.org/%D1%81%D0%B2%D0%B5%D0%B6%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8/#more-6");
 
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Memo2->Text=get_gid(Memo1->Text.c_str()).c_str();
}
Получаю ошибку
Миниатюры
Парсер boost/regex  
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.12.2012, 01:28
C++
1
Memo2->Text= get_gid( AnsiString(Memo1->Text).c_str() ).c_str() ;
Опять здравствуй Юникод !!??
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.12.2012, 01:43
Нее... access violation надо трассировщиком искать. Конструктор string нормально примет и wchar_t *.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.12.2012, 01:46
Это где это нормально находится ? http://www.cplusplus.com/refer... ng/string/

Такие конструкции работаю пока юникод-символ не попадется, но я думал это только проблема RAD2009 в старших версиях должно орать на такие конструкции.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.12.2012, 01:58
Проверил - точно не кушает такое компилятор.
Чего ж у него тогда ac? Глюк такой в 9й версии?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.12.2012, 03:46
Нужен код функции c_str()

Добавлено через 1 минуту
Подарок от добрых разработчиков

Коментарии из заголовочного файла
Цитата Сообщение от Avazart Посмотреть сообщение
C string operator.
NOTE: c_str() returns 'char*' by default to be compatible with
AnsiString::c_str(). However, note that it does so by narrowing
the underlying data of the UnicodeString. So, it's dangerous
to use 'char* UnicodeString::c_str()' in cases where the
the owner of the UnicodeString does not expect its underlying
data to change
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2012, 03:46
Помогаю со студенческими работами здесь

RegEx и отбор наибольшего повторения
Здравствуйте, как через RegEx собрать и все ссылки и отобрать ту, которая наибольшее кол-во раз повторяется? Добавлено через 1 час 21...

Как сравнивать regex выражения?
std::vector &lt;std::regex&gt; lex; lex.push_back(std::regex(&quot;^()*&quot;)); lex.push_back(std::regex(&quot;^()*&quot;)); Вот как сравнить два...

В чем разница библиотек pcre и regex?
библиотеки pcre и regex... В чем разница? Какая работает быстрее? Скажите Ваше мнение!!!

XE4 (Boost+ c++ 11)
Что то не как не могу понять , вот страничка поддержки...

Установка boost
Добрый день, уважаемые обитатели! Прошу, помогите с установкой boost 1_53_0 на RAD XE2. Документация на сайте мне ничем не помогла и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru