C++正则表达式
头文件 #include<regex>
#include<regex>
regex_match 函数是整个字符串完全匹配。返回值:匹配成功返回1,失败返回0
string mobile = "13666666668";
regex re("1\\d{10}"); //注:正则表达式中的\b在C++中需要转义\才能被认为是\b
if (regex_match(mobile, re)) { //因此使用的是\\b
cout << "是电话号码!\n";
} else {
cout << "不是电话号码!\n";
}
可以配合cmatch和smatch类分别存放char*或 string类型字符串的匹配结果,遍历即可获得匹配的值。
分组匹配字符串并且输出匹配的内容
str = "this is text string!";
regex sre("this(.*?)te(.*?)tring!", regex::icase);
smatch sm;
regex_match(str, sm, sre);
for (unsigned i = 0; i < sm.size(); ++i) {
cout << "[" << sm[i] << "] \n";
}
C++11提供的正则表达式库操作string对象,模式使用regex (本质是std::basic_regex)进行初始化,通过regex_match进行匹配,从而产生smatch(本质是match_results对象)。
regex_search 寻找第一个与正则表达式匹配的子序列
string fnames[]={"foo.txt", "bar.txt", "test", "a0.txt", "AAA.txt"};
//在C++中`\`会被作为字符串内的转义符,为使`\.`作为正则表达式传递进去生效,需要对`\`进行二次转义,从而有`\\.`
std::regex txt_regex("[a-z]+\\.txt");
for (const auto &fname: fnames)
cout << fname << ": " << std::regex_match(fna