C++ 怎样用正则表达,, 20
我用VS2010自带的regex库,下面是我的方法regexpattern("(?<=})\D+(?={)");char*buffer="{ffff}helloworld...
我用VS2010自带的regex库,下面是我的方法
regex pattern("(?<=})\D+(?={)");
char* buffer="{ffff}hello world!{ffff}";
cmatch m;
if(regex_match(buffer,m,pattern))
{
MessageBoxA(NULL,m[0].str().c_str(),NULL,MB_OK);
}
编译通过,但一运行就报错:
void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);
有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0014e42c 处的 std::tr1::regex_error。
请问上面的正则该怎样提取呀,,请大大指教个简单的方法。。 展开
regex pattern("(?<=})\D+(?={)");
char* buffer="{ffff}hello world!{ffff}";
cmatch m;
if(regex_match(buffer,m,pattern))
{
MessageBoxA(NULL,m[0].str().c_str(),NULL,MB_OK);
}
编译通过,但一运行就报错:
void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);
有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0014e42c 处的 std::tr1::regex_error。
请问上面的正则该怎样提取呀,,请大大指教个简单的方法。。 展开
展开全部
1)首先这个错误是在于抛出了一个regex_error的异常,你捕获一下就可以了
2)在用字符串表示regex的时候,注意在字符串中间,\是反义字符,”\D"表示对D的转移,显然是错误的,所以如果要表示\D的正则需要使用“\\D",同样{也是关键字符,表示为“\\{"
3)然后我测试了一下(?<=<expr>)语法是regex库解析是不支持的,我给改为了下面的pattern,是可以用的:
regex pattern(".*\\}(\\D+)\\{.*");
char* buffer="{ffff}hello world!{ffff}";
cmatch m;
if(regex_match(buffer,m,pattern))
{
for(int i=0; i<what.size(); i++)
cout<<"str :"<<what[i].str()<<endl;
}
2)在用字符串表示regex的时候,注意在字符串中间,\是反义字符,”\D"表示对D的转移,显然是错误的,所以如果要表示\D的正则需要使用“\\D",同样{也是关键字符,表示为“\\{"
3)然后我测试了一下(?<=<expr>)语法是regex库解析是不支持的,我给改为了下面的pattern,是可以用的:
regex pattern(".*\\}(\\D+)\\{.*");
char* buffer="{ffff}hello world!{ffff}";
cmatch m;
if(regex_match(buffer,m,pattern))
{
for(int i=0; i<what.size(); i++)
cout<<"str :"<<what[i].str()<<endl;
}
2016-01-12 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
借用c的正则表达式库,需要引入头文件<regex.h>。支持POSIX.2正则表达式标准。简单用法如:
regex_t reg; //先声明一个正则表达式体。
regcomp(®, "[a-zA-Z]*", 0); //从字符串来编译这个表达式。
regmatch_t match[2]; //用来保存匹配结果。
regexec(®, "abcedfg", 2, match, 0); //匹配字符串。
此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。
regex_t reg; //先声明一个正则表达式体。
regcomp(®, "[a-zA-Z]*", 0); //从字符串来编译这个表达式。
regmatch_t match[2]; //用来保存匹配结果。
regexec(®, "abcedfg", 2, match, 0); //匹配字符串。
此外,c++中也有自己的正则表达式库,比如boost::regex。需要先安装boost库才能使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c++不可以用正则表达式,想用类正则表达式可以自己封装一个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询