请参阅gif(显示变量的Visual Studio调试器): http://www.elanhickler.com/transfer/regex_does_not_match.gif
bool stob(string s) {
regex e("1");
bool b1 = (s == "1"); // false
bool b2 = (string(s) == "1"); // false
bool does_it_match1 = regex_match("1", e); // true
bool does_it_match2 = regex_match(string(s), e); // false
bool does_it_match3 = regex_match(string("1"), e); // true
return does_it_match1;
}
为什么不匹配?
图像显示s的输入为" 1",更具体地说是49("1")
和0("\0")
的字符
ideone:https://ideone.com/b8luZF(这会解决这个问题,感谢下面的答案)。
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
regex e("1");
string s = "1,";
s.back() = '\0';
cout << regex_match("1", e) << endl;
cout << regex_match(s, e) << endl;
return 0;
}
答案 0 :(得分:3)
与C字符串不同,C字符串从指针指向并在第一个0字节之前结束,std::string
实际上包含 0字节。这似乎与你的字符串完全一样。根据你的调试器,字符串包含两个字符,第一个字符是&#39; 1&#39;第二个是&#39; \ 0&#39;。
因此,您要将2个字符的字符串与1个字符的字符串进行比较,结果因此为假。