ATL里的正则表达式问题

j8daxue j8daxue 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
第一次在程序里用到,百度下得到2篇有用文章
http://www.vckbase.com/document/viewdoc/?id=1256
http://blog.163.com/softtestddj/blog/static/111551117200992114332387/
发现实际要动手写还是有点麻烦的。

以前用find和substr写过以逗号为间隔提取字符串的函数,想试试正则表达式的用法。
第二篇文章里提到
"( ) 分组操作符。例如:(\d+,)*\d+匹配一串由逗号分开的数字,例如: "1"或"1,23,456"。 "
代码如下:

void TestRegExp(wchar_t* format,wchar_t* szMatch)
{
CAtlRegExp<> reExt;
if(REPARSE_ERROR_OK != reExt.Parse(format))
{
return ;
}
CAtlREMatchContext<> mcExt;
if(!reExt.Match(szMatch,&mcExt))
{
cout<<"un match"<<endl;
return ;
}
for(UINT i = 0 ; i < mcExt.m_uNumGroups ; i ++)
{
const CAtlREMatchContext<>::RECHAR* szStart = 0;
const CAtlREMatchContext<>::RECHAR* szEnd = 0;
mcExt.GetMatch(i,&szStart,&szEnd);
ptrdiff_t len = szEnd - szStart;
printf("%d: \"%.*s\"\n", i, len, szStart);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
TestRegExp(_T("(\d+,)*\d+"),_T("123,123"));
TestRegExp(_T("[0-9]+"),_T("102k3"));
return 0;
}

结果第一个不匹配,
第二个匹配了,却没输出结果,即mcExt.m_uNumGroups为0.
有用过的朋友还请指教。
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
j8daxue
VC/MFC 16,550 成员 421,606 内容