今天做一个练习用到了 regex,顺便写了个小程序,代码如下
void regexTest1() {
string patten{"<(.*)>(.*)</(\\1)>"}; // 前两个表达式分别为(.*), "\1"表示与第一个表达式内容相同
regex re{patten};
string str1{"<tar>nico</tar>"};
std::smatch sm;
if (std::regex_match(str1, sm, re)) {
std::cout << "prefix: " << sm.prefix() << std::endl;
std::cout << "match str: " << sm.str() << std::endl;
std::cout << "prefix: " << sm.suffix().str() << std::endl;
std::cout << "sm[1]: " << sm[0] << std::endl; // 匹配合格之所有字符
std::cout << "sm[1]: " << sm[1] << std::endl; // 第一个表达式的字符(.*)
std::cout << "sm[2]: " << sm[2].str() << std::endl; // 第二个表达式的字符(.*)
std::cout << "sm[3]: " << sm[3].str() << std::endl; // 第三个表达式的字符(\\1),内容与第一个表达式相同
}
string str2{"<tar>nico</TAR>"};
if (std::regex_match(str2, sm, re)) {
std::cout << "prefix: " << sm.prefix() << std::endl;
std::cout << "match str: " << sm.str() << std::endl;
std::cout << "prefix: " << sm.suffix().str() << std::endl;
}
return;
}
输出如下
prefix:
match str: <tar>nico</tar>
prefix:
sm[1]: <tar>nico</tar>
sm[1]: tar
sm[2]: nico
sm[3]: tar