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

std::regex и boost::regex

03.12.2012, 00:16. Показов 8005. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Что-то я не пойму что реализация их различна ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
//#include <regex>
//using namespace std;
 
#include <boost/regex.hpp>
using namespace boost;
 
 
int main()
{
  regex re(".*?\\..*");
  std::string s="file.txt";
 
  if ( regex_match(s,re) ) std::cout<<"совпало "<<std::endl; 
  else std::cout<<"не совпало "<<std::endl; 
 
return 0;   
}
Компилятор g++ при boost пишит что совпало (как и ожидалось) при std пишит что не совпало, что за разница?

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2012, 00:16
Ответы с готовыми решениями:

Boost Regex, работа с указателями
Доброго, пытаюсь разобраться с boost::regex и для удобства решил написать обертку под...

Регулярное выражение boost::regex
Здравствуйте форумчане. Не получается написать регулярное выражения для разбора такой строки:...

Boost regex поиск в массиве
Ффф, мне надо на boost regex искать все совпадения в массиве и выдавать в масиив. Прототип функции...

Парсер лога с использованием boost::regex
Всем привет. Есть задача пропарсить лог антивирусника с ипользованием boot:: regex, и выдать...

18
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
03.12.2012, 01:17 2
Возможно, по умолчанию у них выбран разный синтаксис?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.12.2012, 01:32  [ТС] 3
Чет не поймуhttp://www.cplusplus.com/refer... CMAScript/
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
03.12.2012, 01:33 4
Но там можно выбрать
http://www.cplusplus.com/refer... ption_type
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.12.2012, 02:23 5
http://www.boost.org/doc/libs/... yntax.html
Perl regular expressions are the default behavior in Boost.Regex
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.12.2012, 02:25  [ТС] 6
Ну так про буст то понятно... вопрос больше про новый стандарт...

Походу в него не включили первовские выр-я ?
И придется POSIX смотреть...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 16:31  [ТС] 7
Никак не могу понять почему код из темы

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
#include <windows.h>
 
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <regex>
 
using namespace std;
//----------------------------------
int main()
{
system("chcp 1251");
 
ifstream ifs("1.txt");
if(!ifs) { cerr<<"file not found"<<endl; return 0; }
 
string s;
string sre= "([[:digit:]]{0,6}),?\\s*(.*?)\\sг,(.*)"; // содержит кириллицу "г"
 
regex re(sre);
smatch m;
 
while (getline(ifs,s) &&  regex_search(s,m,re) )
  {
    cout<<"<"<< m[1] <<">  ["<<m[2]<<"]"<<endl;
  }
    
system("pause");
return 0;
}
Работает в VC++2010 но не работает на компиляторе MinGW ( тот что в подписи у niXman ) + CodeBloks
и не работает под Ubuntu ( но работает если использовать boost вместо std )
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 16:33  [ТС] 8
Под Window вылазиет такое
Миниатюры
std::regex и boost::regex  
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.12.2012, 17:56 9
Avazart, Да не реализованы нормально regex еще ни в одном компиляторе. В некоторых просто стоит заглушка, кидающая исключение.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 17:59  [ТС] 10
ForEveR, Пипец ...

Удивительно что в VC++ работает нормально, а g++ ( и MinGW ) нет...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.12.2012, 18:06 11
Собственно убрав non-greedy repeats все будет работать в С++11. Что кстати довольно странно, ибо non-greedy repeats есть и в ECMAScript Grammar.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 18:08  [ТС] 12
Ну пример http://www.cplusplus.com/refer... ex_search/ с такой же ошибкой
а пример http://www.cplusplus.com/refer... gex_match/ нормально...

( Под Windows )
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.12.2012, 18:24 13
Цитата Сообщение от Avazart Посмотреть сообщение
Удивительно что в VC++ работает нормально, а g++ ( и MinGW ) нет...
Почему удивительно?

Опытным путем установил, что ошибка происходит в конструкторе regex. Если идти далее, то доходим до функции _M_atom() (находится в regex_compiller.h MinGW) далее нет времени углубляться - работать пора

Добавлено через 15 минут
Лично у меня в реализации _M_atom
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
      
//... При втором вызове заходит в условие
if (_M_match_token(_ScannerT::_S_token_subexpr_begin))
    {
    
      int __mark = _M_state_store._M_sub_count();
      _StateSeq __r(_M_state_store,
            _M_state_store.
            _M_insert_subexpr_begin(_Start(__mark)));
          //При вызове функции _M_disjunction()(это тут уже сложная рекурсия)
      this->_M_disjunction();
      
      if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
        __throw_regex_error(regex_constants::error_paren);
      if (!_M_stack.empty())
        {
          __r._M_append(_M_stack.top());
          _M_stack.pop();
        }
      __r._M_append(_M_state_store._M_insert_subexpr_end
            (__mark, _End(__mark)));
      _M_stack.push(__r);
      return true;
    }
      return _M_bracket_expression();
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 18:32  [ТС] 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Опытным путем установил, что ошибка происходит в конструкторе regex.
А вывод ? Сюрприз от разработчиков ?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.12.2012, 18:36 15
Цитата Сообщение от Avazart Посмотреть сообщение
А вывод ? Сюрприз от разработчиков ?
Скорее всего, просто где-то что-то еще не до конца реализовано.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 18:36  [ТС] 16
Ну так заглушили бы ... а то гадай ...
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
26.12.2012, 18:39 17
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так заглушили бы ... а то гадай ...
имхо, лучше юзать бустовский до поры до времени
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.12.2012, 18:43  [ТС] 18
Ну я так и понял...
Только правильно ли я понимаю что имеет смысл использовать теперь в boost POSIX-выражения чтоб потом легче перенести ?
0
Jupiter
26.12.2012, 23:23     std::regex и boost::regex
  #19

Не по теме:

а всего-то стоило добавить в стандарт std::not_implemented_exception

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2012, 23:23

Std::regex не работает
Здравствуйте, имеется регекс для следущего паттерна: &quot;слово пробел слово newline . Что-то вроде...

Ошибка составления std::regex в C++11
Есть вот такой пример кода: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;regex&gt; int main()...

Есть ли инструкция по использованию std::regex
Есть какой-то мануальчик по использованию сего чуда в c++11? Ну или подскажите как найти в поле...

Boost::regex не могу сформировать ссылку на паттерн при поиске
Необходимо найти 2 повторяющихся заголовка и объединить некоторое содержимое через replace. Хотел...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

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