为什么这个正则表达式不匹配此字符串?

时间:2017-01-31 20:10:20

标签: c++

我有下一个代码示例:

#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;
}

如果我输入一个字符串,请说:

&#34;我_____________快乐&#34; (很多空格而不是下划线(&#39; _&#39;)。

然后它应该工作 - 因为我有一个&#34;字&#34;然后是一个&#34;空间&#34;然后是一个&#34;字&#34;然后&#34;我想要多少个空格,然后是一个&#34;单词&#34;,这应该与我上面的表达相匹配,但不是。 为什么呢?

2 个答案:

答案 0 :(得分:1)

你需要逃避反斜杠:

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

答案 1 :(得分:0)

因为您使用了regex_match,而是应该使用regex_search
如果整个马赫完全找到,匹配将成立 如果至少有一个匹配项找到,则 serach 将为true 所有转义字符也应为\\