Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.06.2015
Сообщений: 3

Boost::regex_search

18.06.2015, 10:09. Показов 528. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

По аналогии с этим:
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
// строка, в которой ищем (std::string)
    std::string Message = (Memo1->Lines->Text).t_str();
    // поисковая строка с рег. выражением
    std::string Exp = (Edit1->Text).t_str();
    // итератор - начало строки поиска
    std::string::const_iterator xItStart = Message.begin();
    // итератор - конец строки поиска
    std::string::const_iterator xItEnd = Message.end();
    // регэксп
    boost::regex expression(Exp);
    // структура для результатов поиска
    boost::smatch what;
    // найденная подстрока (верхний уровень регэкспа)
    std::string found;
    bool bfound = false;
 
    int pos = 0;
    Memo2->Lines->Clear();
 
    // поиск от начального до конечного итератора -
    // возвращает TRUE при нахождении соответствия
    while (boost::regex_search(xItStart, xItEnd, what, expression))
    {
       bfound = true;               // флаг "НАЙДЕНО"
       found.assign(what[0]);       // найденная подстрока
 
       pos += what.position(0);     // позиция, в кот. найдена подстрока
 
       Memo2->Lines->Add(String(found.c_str()));
 
       // позиция, в которой найдено совпадение
       //ShowMessage("Found at: " + IntToStr(pos));
       // отобразить найденную подстроку
       //ShowMessage("E-mail: " + UnicodeString(found.c_str()));
 
 
       xItStart = what[1].second;   // передвинуть начальный итератор
                                    // для нового цикла поиска
    }
    if (!bfound) ShowMessage("Email not found");
написал свой код:
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
        String HtmlMemoText = RichEdit1->Lines->Text;
        std::string stdLine(AnsiString(HtmlMemoText).c_str());
        std::string ExpressionText(AnsiString(Edit1->Text).c_str());
        boost::regex xRegEx (ExpressionText);
        boost::smatch xResults;
        std::string::const_iterator xItStart = stdLine.begin();
        std::string::const_iterator xItEnd = stdLine.end();
        long int pos = 0;
        long int max_pos = 0;
        long int kol_volink = 0;
        AnsiString linkfortext;
 
        std::string found;
 
        int mmm = 0;
 
        Memo2->Lines->Clear();
 
        while (boost::regex_search(xItStart, xItEnd, xResults, xRegEx)) {
            Application->ProcessMessages();
 
 
            pos += xResults.position(0) + xResults.length();
            max_pos = pos - xResults.length();
 
            found = string(xResults[0].first, xResults[0].second);
 
            //found.assign(xResults[0]);
            Memo2->Lines->Add(String(found.c_str()) + ": " + String(max_pos));
            mmm++;
            xItStart = xResults[0].second;
        }
При фразе: мама варит маше кашу - машу
выводит позиции: ма: 0 ма: 0 ма: 7 ма: 17

Ну, неверно же.

Изменил так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while (boost::regex_search(xItStart, xItEnd, xResults, xRegEx)) {
            Application->ProcessMessages();
 
 
            pos += xResults.position(0) + xResults.length();
            max_pos = pos - xResults.length();
 
            found = string(xResults[0].first, xResults[0].second);
 
            //found.assign(xResults[0]);
            Memo2->Lines->Add(String(found.c_str()) + ": " + String(max_pos));
            mmm++;
            xItStart = xResults[0].second;
        }
Выводит правильно.
Подскажите, как все-таки правильно работать с boost::regex_search, пожалуйста.
Например, мне не понятно, что означает xResults[0] или xResults[1].

Основная цель: находить в коде HTML выражения. В том и другом случае код врет.
Спасибо.
Регулярное выражение составляю так: (?-i)Документы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2015, 10:09
Ответы с готовыми решениями:

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

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

Требование boost в C++ Builder XE
Всем доброго. Вот установил C++ Builder XE. Скажите C++ Builder использует boost для построения проектов? Просто boost я не...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2015, 10:09
Помогаю со студенческими работами здесь

Установка boost c++ builder 6
Напишите пож как правильно установить буст. Ставлю boost 1.33.0 Пишу в cmd , переход к папке буста ,папка jam_src , потом пишу build...

boost algorithm string
Пробую код ( Builder2009 ) #include <iostream> #include <string> #include <boost/algorithm/string.hpp> #pragma hdrstop ...

Парсер boost/regex
Всем привет вот возникла сложно с boost/regex начну по порядку. Написав достаточное количество парсеров информации из интернета я понял...

Подключить библиотеку boost в borland 6
Первый раз пытаюсь обратится к сторонней библиотеке и при попытке подключении выходит ошибка. Что не так делаю?

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru