std::cout << std::regex_match(std::string("f 1/1/1 3/3/1 4/4/1"), std::regex("f \d+\/\d+\/\d+ \d+\/\d+\/\d+ \d+\/\d+\/\d+")); // -> 0
我希望上面的正则表达式匹配给定的字符串,但事实并非如此。怎么了?
它匹配https://www.regex101.com/,并在Notepad ++中进行测试
答案 0 :(得分:5)
您的代码存在两个问题,两个问题都与无效的escape-sequences相关:
"\d"
被解释为转义序列,结果字符串(传递给std::regex
)将不包含您期望的内容 - 而是使用"\\d"
来正确获取斜杠后跟字母d
。
"\/"
不是有效的转义序列,您实际上无需转义/
,而是将其保留为("/"
)。
#include <regex>
#include <iostream>
#include <string>
int main () {
bool result = std::regex_match (
std::string ("f 1/1/1 3/3/1 4/4/1"),
std::regex ("f \\d+/\\d+/\\d+ \\d+/\\d+/\\d+ \\d+/\\d+/\\d+")
);
std::cout << result << std::endl; // 1
}