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

Парсер boost/regex

06.12.2012, 19:52. Показов 6452. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru