regex reg1("(\\d+(\\.\\d+)?(e[\\+\\-]?\\d+)?)|([a-zA-Z\\_]\\w*)|(,)|([\\+\\-\\*\\/\\^\\%\\(\\)])");
string str1 = "43+12 - Print(3,4)*7";
smatch sm1;
for (sregex_token_iterator it(str1.begin(),str1.end(),reg1), it_end;it!=it_end; ++it) {
cout << it->str() << endl;
}
我匹配一个字符串,把不同种类的分出来,并且在分组来时还能知道是哪个正则分组匹配到的。。。不然我只能在分出来后,再做多次匹配了。。。
c++标准库的regex不支持named grouping。所以只能根据分组出来的顺序了
规则是从外向内,再从前向后,比如
((ab(c))(d))匹配abcd
依次是
abcd
abc
d
c