正则表达式regex(regular expression)是一种强大的描述字符序列的工具。在许多语言中都存在着正则表达式,C++11中也将正则表达式纳入了新标准的一部分,使用时需要include头文件 <regex>。
Python中有re.match / re.search / re.sub / re.compile / re.finditer这些功能;C++的regex有std::regex_match / std::regex_search / std::regex_replace这三个function可选择,与python的re.match / re.search / re.sub一一对应。match_results 有点类似于python re.match的返回值中的group;不同的是,match_results需要通过[index]下标访问容器内的元素,python中的re.match.group通过(index)来访问。
对于正则表达式的格式,C++同python一致,不过需要注意的是,像 \d \s 等在C++中需要进行转义,也就是需要写成 ”\\d” ”\\s”
官方例子就是一个不错的参考 http://www.cplusplus.com/reference/regex/regex_match/
正则表达式的格式可以直接参考python的 https://www.runoob.com/python/python-reg-expressions.html
参考 https://www.cnblogs.com/ittinybird/p/4853532.html
// g++ -std=c++11 -g xxx.cpp -o xxx
#include <iostream>
#include <regex>
using namespace std;
int main(int argc, char* argv[])
{
std::string pattern = "\\s*(read)\\s+register_0x([\\dabcdef]{1,2})\\s*";
std::string input_cmd = "read register_0x3f";
std::regex expression(pattern);
std::smatch result; // same as std::match_results<string::const_iterator> result;
bool flag = std::regex_match (input_cmd, result, expression);
if(flag)
{
cout<<"match :"<<endl;
for (size_t i = 0 ; i < result.size() ; ++i )
{
cout<<"result["<<i<<"] = "<<result[i].str() <<endl;
}
}
else
{
cout<<"no match "<<endl;
}
return 0;
}
// ---------- case output ----------
// match :
// result[0] = read register_0x3f
// result[1] = read
// result[2] = 3f