2014-02-09 3 views
4

У меня проблема с регулярным выражением C++. Я получил строку типа «f 123/123 1234/123/124 12», и я хочу получить все числа до «/».Как использовать regex C++?

Это мое regexp: "\ s (\ d +)". Я пробовал его на http://rubular.com/, и он работает. Вот мой код:

std::regex rgx("\\s(\\d+)"); 
std::smatch match; 

if (std::regex_search(line, match, rgx)) 
{ 
    std::cout << "Match\n"; 

    std::string *msg = new std::string(); 
    std::cout << "match[0]:" << match[0] << "\n"; 
    std::cout << "match[1]:" << match[1] << "\n"; 
    std::cout << "match[2]:" << match[2] << "\n"; 

} 

Но я получаю это:

Match 
match[0]:123 
match[1]:123 
match[2]: 

Я понимаю, что матч [0] не является "группы", как в Python и Ruby. Спасибо и извините за мой английский :)

ответ

3

regex_search соответствует один раз (первая подстрока, соответствующая регулярному выражению). Вам нужно зациклиться.

Попробуйте следующее:

std::regex rgx("\\s(\\d+)"); 
std::smatch match; 

while (std::regex_search(line, match, rgx)) 
{ 
    std::cout << match[0] << std::endl; 
    line = match.suffix().str(); 
} 
+0

'm.suffix() ул()'.? – suspectus

+0

@suspectus, см. ['Match_resulsts :: suffix'] (http://www.cplusplus.com/reference/regex/match_results/suffix/) и [' match_resulsts :: str'] (http: //www.cplusplus .com/справочник/регулярное выражение/match_results/ул /). – falsetru

+0

@suspectus, Извините, я неправильно понял. Вы имели в виду опечатку. Я починил это. Спасибо, что указали это. – falsetru

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