上干货,关于使用C++11的regex正则匹配字符串的过程
#include<iostream>
#include<regex>
#include<stack>
using namespace std;
int main()
{
regex r1("\\d+");
regex r2("\[+|-|*|/]");
string s = "1+22+33+44-55+6+77-88+99+100*8+50/2+97*3";
smatch result;
auto iter_begin = s.cbegin();
auto iter_end = s.cend();
stack<int> s1;
stack<string> s2;
while (regex_search(iter_begin, iter_end, result, r1))
{
int num = atoi(result.str().c_str());
s1.push(num);
iter_begin = result[0].second; //更新迭代器位置
}
iter_begin = s.cbegin();
iter_end = s.cend();
while (regex_search(iter_begin, iter_end, result, r2))
{
s2.push(result.str());
iter_begin = result[0].second; //更新迭代器位置
}
return 0;
}
写的比较繁琐,但是便于理解。
首先要写正则规则,这里先介绍r1规则。规则是自己定的,首先规则是一个字符串,第一个字符要用 \ 转义,后面就是要匹配的规则。这里我们第一