2017-01-31 3 views
0

У меня есть следующий пример кода:Почему это регулярное выражение не соответствует этой строке?

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

int main() 
{ 
    string input; 
    regex third("([a-zA-Z]*) ([a-zA-Z]*)[\s]*([a-zA-Z]*)"); 
    smatch third_match; 
    getline(cin, input); 
    while (input != "q") 
    { 
     if(regex_match(input, third_match, third)) 
      cout << "Ok" << endl; 
     getline(cin, input); 
    } 
    return 0; 
} 

Если я ввожу строку, скажем:

"Я am_____________happy" (много пространства вместо подчеркивания ('_')

. Затем он должен работать, потому что у меня есть «слово», а затем «пространство», а затем «слово», а затем «сколько пробелов, которые я хочу, а затем« слово », и это должно соответствовать моему выражению выше, но is is Почему?

+0

- ваша функция ввода, фиксирующая символ конца строки? –

+1

Ваш код ввода/вывода плохой. Он переходит в бесконечный цикл в общем случае, потому что он не может проверить результат операции ввода-вывода. –

ответ

1

Вам нужно чтобы избежать обратной косой черты:

regex third("([a-zA-Z]*) ([a-zA-Z]*)[\\s]*([a-zA-Z]*)"); 
//         ^^^^^ 
+0

[Demo] (http://ideone.com/wL53tl) –

+0

Еще не работает человек .... –

0

, потому что вы использовали regex_match и вместо этого вы должны использовать regex_search
матч будет верно, если весь маш точно найти SERACH будет справедливо, если хотя бы один матч найти
Также все escape-символы должны быть \\

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