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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет! Юзаю библиотеку 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 01:10
Ответы с готовыми решениями:

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

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

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

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

9
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 01:55 2
Туфта у тебя, а не код...
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
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.07.2012, 02:02  [ТС] 3
Слушай ты блин, "неудачник". Вместо того что бы обсирать людей, лучше бы подсказал бы с решением проблемы.
P.S. все что ты перечислил это не критично было на писано за 30 секунд для разбора регулярных выражений я даже и не заморачивался по этому поводу. Я просил не критиковать а помочь, если ты этого сделать не в состоянии то и не стоит показывать "какой ты умный" мистер "кэп".
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 02:04 4
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
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.07.2012, 02:12  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Так нефиг заморачивать других своим быдлокодом, не умешь воспринимать критику нефиг писать на форум.
Слушай умник я с тебя фигею. Задание читать надо, о чем спрашивают, а не придумывать своё. Код гавно и т.д. Быдло код? Да где ты это выражение услышал?! Херню не пари. Здесь негатива не нужно.
0
gray_fox
25.07.2012, 02:18
  #6

Не по теме:

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

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

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

Не по теме:

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

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

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

Вопрос : можно ли сделать так чтобы проверять у всего файла целиком , а не считывать его построчно?
Читай про regex_search()
1
25.07.2012, 02:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2012, 02:38
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru