最近需要解析配置文件,遇到从@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 等方法 各有用处
标签:regex,END,iterator,pos,C++,零断,sregex,宽言
From: https://www.cnblogs.com/kafeibuhuizui/p/17390687.html