我有下一个代码示例:
#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;,这应该与我上面的表达相匹配,但不是。 为什么呢?
答案 0 :(得分:1)
你需要逃避反斜杠:
regex third("([a-zA-Z]*) ([a-zA-Z]*)[\\s]*([a-zA-Z]*)");
// ^^^^^
答案 1 :(得分:0)
因为您使用了regex_match
,而是应该使用regex_search
如果整个马赫完全找到,匹配将成立
如果至少有一个匹配项找到,则 serach 将为true
所有转义字符也应为\\