2013-05-27 3 views
1

Я пытаюсь построить регулярное выражение в C++, используя boost::regex, который будет соответствовать словам, начинающимся с MOV или JMP, следующих :\\d:\\d-\\d:\\d.Регулярное выражение проблемы с использованием boost :: regex

Например, MOV:1:2-3:4 или JMP:2:2-3:5.

Я пробовал с выражением как (MOV|JMP):\\d:\\d-\\d:\\d, но он оценивает ложность выше двух примеров.

У меня есть два вопроса:

  1. Что плохого в приведенном выше выражении?
  2. Что было бы регулярным выражением, если я хочу игнорировать регистр для MOV и JMP?
+0

Не можете ли вы использовать std :: regex по какой-то причине? [C++ regex] (http://www.cplusplus.com/reference/regex/) – kfsone

+0

gcc на моем ящике не поддерживает регулярное выражение C++. Но регрессия C++ оценивает выражение выше для true для данных примеров? – Jimm

ответ

0

Следующие работы идеально подходят для меня.

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

int 
main(int argc, char** argv) 
{ 
    boost::regex it("(MOV|JMP):\\d:\\d-\\d:\\d"); 

    bool matches = boost::regex_match("MOV:1:2-3:4", it); 

    std::cout << matches << std::endl; 
    return 0; 
} 

Вот подборка:

svengali ~ % g++ main.c -lboost_regex 
svengali ~ % a.out 
1 
svengali /tmp % g++ --version 
g++ (Debian 4.7.2-5) 4.7.2 

Как вы войти в выражение? Если это не строковый литерал, вам может не понадобиться скрывать обратную косую черту.

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