2012-06-21 3 views
0

У меня ошибка в моем простом REGEX. Я пытался написать несколько простых регулярных выражений на C++, используя std::regex. Вот мой код до сих пор.REGEX: как соответствовать синтаксису?

#include <iostream> 
#include <regex> 
#include <string> 

int main(void) 
{ 
    std::string str = "Hello world"; 
    std::regex rx("\w+\s\w+"), rx2("ello"); 
    std::cout << std::boolalpha << std::regex_match(str.begin(), str.end(), rx) << "\n"; 
    std::cout << std::boolalpha << std::regex_search(str.begin(), str.end(), rx2) << "\n"; 
    return 0; 
} 

Эта программа должна печатать (по обучающей)

true 
true 

но он печатает

false 
false 

Где я делаю ошибку? Заранее спасибо.

Примечание: Я использую g++ -std=c++0x %file.cpp% -o %file%, если это помогает

+2

вы используете GCC? Если это так, переключитесь на boost.regex, потому что '' на самом деле не реализовано. –

+0

Работает с clang ++/libC++, а также с g ++/libstdC++. Оба не печатают «false false». – kennytm

+5

Разве вам не нужно было бежать от косой черты? – Joey

ответ

0

Как уже было сказано г ++ (GCC) не имеет надлежащего выполнения для регулярных выражений (это невыполненными, но все еще компилирует).

Boost library имеет реализацию для регулярных выражений, которая почти полностью совместима с регулярными выражениями в C++ 11. Вы можете использовать это с минимальными изменениями в своем коде (просто используя boost :: вместо std: :).

Вот код, который компилируется и работает:

#include <iostream> 
#include <boost/regex.hpp> 
#include <string> 

int main(void) 
{ 
    std::string str = "Hello world"; 
    boost::regex rx("\\w+\\s\\w+"), rx2("ello"); 
    std::cout << std::boolalpha << boost::regex_match(str.begin(), str.end(), rx) << "\n"; 
    std::cout << std::boolalpha << boost::regex_search(str.begin(), str.end(), rx2) << "\n"; 
    return 0; 
} 

Обратите внимание, что я также неподвижное недостающие побеги для обратных косых черт для ого, потому что он не работает без него.

Для компиляции этого нужно установить libboost-регулярное выражение-DEV пакет (или что-то подобное, если не используется Ubuntu/Debian) и выполнить это:

g++ -std=c++0x main.cpp -lboost_regex -o test 
Смежные вопросы