2017-01-31 71 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”(空格,而不是下划线(很多 '_')

。然后,它应该工作 - 因为我有一个“单词”,然后是一个“空间”,然后是一个“单词”,然后“我想要多少空间,然后是一个”单词“,这应该符合我上面的表达,但是 为什么?

+0

是您的输入函数捕获行尾字符? –

+1

你的I/O代码不好。它通常会进入无限循环,因为它无法检查I/O操作的结果。 –

回答

1

您需要转义反斜线:

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

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

+0

仍然没有工作的人.... –

0

,因为你使用regex_match,而是你应该使用regex_search
比赛将是真实的,如果整个马赫准确找到,如果至少一个匹配找到
检索算法将是真实的 也所有转义字符应该是\\

相关问题