【C++学习笔记】C++ 正则表达式不完全支持零断宽言

最近需要解析配置文件,遇到从@START DATA @END中提取DATA的正则,按照C#的操作,直接(?<=@START)[\W\w]?(?=@END),就能提取的,可是在C++中,regex e("(?<=@START)[\W\w]?(?=@END)") 报错了,找了很多说法,最终结论:支持先行断言,不支持后行断言 即:(?<=@START) 和(?<!@START)。
好在C++支持子匹配项,所以变化一下:@START([\W\w]*?)(?=@END)
上代码:

regex e("@START([\W\w]*?)(?=@END)");
string str="@START68@END";
sregex_token_iterator pos(str.cbegin(),str.cend(),e,1);//-1 显示没匹配的字符   0显示匹配的全部字符  1、2、3 显示子匹配
sregex_token_iterator end;
for(;pos!=end;pos++)
{
  string result=*pos;
}
//就拿到68了

//另外还有sregex_iterator  regex_search regex_match 等方法 各有用处
posted @ 2023-05-11 12:05  咖啡不会醉  阅读(49)  评论(0编辑  收藏  举报