Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1

Регулярные выражения Boost::regex

25.07.2012, 01:10. Показов 2787. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Юзаю библиотеку boost. В частности boost::regex.
Столкнулся с такой проблемой. Как заставить библиотеку обрабатывать многострочный текст.
Есть файл формата *.txt в нем записано:
sail.xls
saij3.xls
saig4.xls
saic5.xls
sais2.xls
saia6.xls
sais7.xls
saif8.xls
na1.xls
sa2.xls
sa1.xls

Нужно при заданном регулярном выражении получить строку и номер строки.
Вот код
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
#include<iostream>
#include<boost\regex.hpp>
#include<fstream>
 
int main(void)
{
 
    std::fstream file("f.txt", std::ios::in | std::ios::binary);
    if(!file)printf("Не удалось открыть файл");
    file.seekg(0,std::ios::end);
    int position = file.tellg();
    file.seekg(0,std::ios::beg);
 
    char *ptline = new char[position +1];
    *ptline = '\x0';
    file.read(ptline,position * sizeof(char));
    *(ptline + position) = '\x0';
    
    boost::regex RegExp (".a.\.xls");   
    boost::cmatch m;
    
    if ( boost::regex_match(ptline,m,RegExp) ) 
    {
        //std::cout << m.position() << std::endl;
        int sz = m.size(); // Количество групп сопоставления
        for ( int i = 0; i < sz; ++ i )
            std::cout << std::string( m[i].first, m[i].second ) << std::endl;
    }
    delete []ptline;
 
    system("pause");
return (0);
}
поидеи должен получить строки
saia6.xls
na1.xls
sa2.xls
sa1.xls
но функция boost::regex_match возвращает false;
Что я не так делаю подскажите кто в курсе!? Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2012, 01:10
Ответы с готовыми решениями:

Регулярные выражения Boost::regex
Всем привет, разбирал пример с учебника (регулярные выражения) и столкнулся не понятным явлением. Задание: Выбрать номера только такого...

Регулярные выражения.Boost.
Суть вопроса такова.Я установил boost, убил на это 3 часа,но все же установил :) Так вот,все работает,никак не нарадуюсь привычным из php...

Boost и регулярные выражения
Добр день. У меня возникла проблема с регулярными выражениями на C++, среда RAD 2010, C++ Builder, библиотека Boost. В Memo имеется...

9
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 01:55
Туфта у тебя, а не код...
1.
C++
1
#include<boost/regex.hpp> // слеш
2.
C++
1
2
std::fstream file("f.txt", std::ios::in | std::ios::binary);
// у тебя текстовый файл, какого его открывать в бинарном режиме?
3.
C++
1
2
boost::regex RegExp (".a.\.xls");  
// Регулярка не правильная
4...
1
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.07.2012, 02:02  [ТС]
Слушай ты блин, "неудачник". Вместо того что бы обсирать людей, лучше бы подсказал бы с решением проблемы.
P.S. все что ты перечислил это не критично было на писано за 30 секунд для разбора регулярных выражений я даже и не заморачивался по этому поводу. Я просил не критиковать а помочь, если ты этого сделать не в состоянии то и не стоит показывать "какой ты умный" мистер "кэп".
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 02:04
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
std::ifstream f("f.txt");
if(f)
  {
   int line=0;
   std::string str;
   boost::regex re(".a.*?\\.xls");
   while( getline(f,str) )
       {
         if( boost::regex_match(str,re) ) std::cout<<"#"<<line<<"\t"<<str<<std::endl;
         line++;
       }
   }
 else std::cerr<<"Ошибка: Не удается открыть файл"<<std::endl;
Добавлено через 1 минуту
P.S. все что ты перечислил это не критично было на писано за 30 секунд для разбора регулярных выражений я даже и не заморачивался по этому поводу.
Так нефиг заморачивать других своим быдлокодом, не умешь воспринимать критику нефиг писать на форум.
2
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.07.2012, 02:12  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Так нефиг заморачивать других своим быдлокодом, не умешь воспринимать критику нефиг писать на форум.
Слушай умник я с тебя фигею. Задание читать надо, о чем спрашивают, а не придумывать своё. Код гавно и т.д. Быдло код? Да где ты это выражение услышал?! Херню не пари. Здесь негатива не нужно.
0
25.07.2012, 02:18

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
boost::regex re(".a.*?\\.xls");
Там + нет что ли?

0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 02:26
Не по теме:
Та фиг его знает чЁ он хотел...хай сам разбирается.
0
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.07.2012, 02:31  [ТС]
Да и к стати моё регулярное выражение написано правильно я проверил на твоем коде. Как я понял проблема была в том что я читал весь файл целиком и пытался применить к этому регулярное выражение. Это не работало. А ты читаешь файл построчно и проверяешь на соответствие.
Вопрос : можно ли сделать так чтобы проверять у всего файла целиком , а не считывать его построчно?

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Та фиг его знает чЁ он хотел...хай сам разбирается.
Читать нужно, просто прочитать.. вопрос!
0
25.07.2012, 02:32

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Не по теме:
Та фиг его знает чЁ он хотел...хай сам разбирается.
Я имел ввиду заменить .*? на .+ . Так то да, конечно...)

0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 02:38

Я имел ввиду заменить .*? на .+ . Так то да, конечно...)
Ну так выведет всё равно больше строк чем надо, как я понял

Вопрос : можно ли сделать так чтобы проверять у всего файла целиком , а не считывать его построчно?
Читай про regex_search()
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2012, 02:38
Помогаю со студенческими работами здесь

Регулярные выражения в boost - что-то не разберусь
Привет! Глянул примеры использования boost по части регулярных выражений. Написал следующий код: void...

RegEx Boost
Доброго времени суток. Ребята у меня во время выполнения программы, сама программа ругается на регулярное выражение. Может кто сталкивался,...

Проблема с boost-regex
Код программы: #include &lt;iostream&gt; #include &lt;boost/regex.hpp&gt; using namespace std; int main() { boost::regex...

Linking Error boost regex
Всем привет. Скачал boost_1_69_0. Скомпилил bjam cmd d:\boost\boost_1_69_0\bootstrap.bat gcc Версия компилятора gcc...

Необработанное исключение Boost::Regex
Только начал изучение буста - решил начать с регулярных выражений, т.к. они в данный момент требуются. Всё собрал, установил, во время...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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 Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru