c++正则表达式的三部分
1)正则匹配
2)正则搜索
3)正则替换
正则搜索 案例1:
读入一个文件,从中提取第一个“key number"中的number并返回
//读入一个文件,从中提取key 0.36中的0.36并返回
float getParamByKey(const std::string& filePath, const std::string paramName)
{
if (/*filtpath不存在*/) {
std::cerr << "xxxx" << std::endl;
}
else
{
//将文件内容读入string:
std::ifstream ifs(filePath);
std::string content((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>()));
std::string::const_iterator iter = content.begin();
std::string::const_iterator iterEnd = content.end();
std::smatch result;
std::string regex_str1(" *" + paramName + " *[0-9]*\.[0-9]* *\n");//匹配keyName 3.66这种情况;
std::regex pattern1(regex_str1, std::regex::icase);
if (std::regex_search(iter, iterEnd, result, pattern1))//找到第一个匹配的字符串
{
std::string resStr = result[0]; //keyName 3.66
std::string regex_str2("[0-9]*\.[0-9]*\n");//从keyName 3.66中提取出3.66
std::regex pattern2(regex_str2, std::regex::icase);
std::smatch result2;
if (std::regex_search(resStr.cbegin(), resStr.cend(), result2, pattern2))
{
std::string strVal = result2[0];
float val = atof(strVal.c_str());
return val;
}
}
}
}
正则搜索案例2: 从文件中找出所有的 ”keyNme 数字“ 字符串:
int main()
{
//read file to string:
std::ifstream ifs("C:/myfile.txt");
std::string content((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>()));
string regex_str(" *keyName *[0-9]*\.[0-9]* *\n");
regex pattern1(regex_str, regex::icase);
string::const_iterator iter = content.begin();
string::const_iterator iterEnd = content.end();
string temp;
//正则查找
smatch result;
while (std::regex_search(iter, iterEnd, result, pattern1)) {
temp = result[0];
cout << temp << endl;
iter = result[0].second; //更新搜索起始位置
}
}
==
Ref:
https://www.cnblogs.com/z1987/p/5191702.html
https://www.cnblogs.com/coolcpp/p/cpp-regex.html