2013-06-05 2 views
2

У меня возникают проблемы извлечения значения лексем из моей строки: «JOIN #ROOM \ г \ п» Я компиляция моего кода на Mingw64 со следующими аргументами: г ++ tregex.cpp -о tregex.exe -std = гну ++ 11Regex C Справка по экранирующему символу

Я получаю эту ошибку, но не мое исключение по некоторым причинам:

Это приложение просил Runtime прекратить его необычным способом. Для получения дополнительной информации обратитесь в службу поддержки приложения. Terminate вызывается после метания экземпляра 'станд :: regex_error' , что(): regex_error

Это мой код:

#include <regex> 
#include <string> 
#include <iostream> 
using namespace std; 

//Tregex.cpp 

int main(void) { 
    regex rgx("[[:cntrl:]]"); 
    string str = "JOIN #ROOM\r\n"; 
    smatch match; 
    try{ 
     if(regex_search(str, match, rgx)) 
      for(auto token:match) cout << token <<"\n"; 
     cout<< endl; 
    } 
    catch(regex_error & e){ 
     if(e.code() == regex_constants::error_escape) 
      cerr << "invalid escape character \n"; 
     else if(e.code() == regex_constants::error_stack) 
      cerr << "regular expression is not big enough\n"; 
     else 
      cerr << "exception caught: "<< e.what()<<"\n"; 
    } 
    cin.get(); 
    return 0; 
} 
+1

'' поддержка в gcc [далеко не полная] (http://stackoverflow.com/questions/12530406/is-gcc4-7-buggy-about-regular-expressions/12665408#12665408). Вы должны переключиться на использование Boost, если вам нужно регулярное выражение. – Praetorian

+0

- '[[: cntrl:]]' поддерживается в C++ 11 regex? –

+0

Вау, я даже не знал, что регулярное выражение все еще в сыром виде для gcc. Итак, является ли визуальный студийный компилятор для окон полностью реализован? Тогда я буду использовать boost. – HeroofCode

ответ

0

FWIW, нет ничего плохого в вашей C++ кода, и отлично работает с Clang и libc++ на моем MacBook.

Как указано в комментариях выше, <regex> является одной из функций, которые работают в libC++ проекта LLVM, но has never worked properly in the GNU project's libstdc++. Вы можете попробовать перейти на libC++, если он доступен для вашей платформы.

Смежные вопросы