ATL里的正则表达式问题
第一次在程序里用到,百度下得到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"。 "
代码如下:
结果第一个不匹配,
第二个匹配了,却没输出结果,即mcExt.m_uNumGroups为0.
有用过的朋友还请指教。
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.
有用过的朋友还请指教。
...全文
相关推荐
A Regular Expression Wrapper Using ATL in C++Src.zip
ATL中的正则表达式功能主要由`ATL::CRegEx`类提供,它是ATL COM库的一部分。`CRegEx`类为C++开发者提供了接口,可以执行诸如编译、匹配、替换等与正则表达式相关的操作。
A Regular Expression Wrapper Using ATL in C++.
这些方法将使用ATL的正则表达式引擎进行实际操作。
MFC自带的stl正则表达式的使用
在编写代码时,如果遇到文档不足的问题,可以参考微软的官方文档、在线资源,甚至通过查看ATL源码来了解其内部实现。
用 ATL ActiveX 绘制任意平面函数的曲线
解析函数字符串通常涉及词法分析和语法分析,可以使用正则表达式或者自定义的解析算法来实现。一旦解析成功,我们可以计算一系列x值,然后通过求出对应的y值来确定点的坐标,最后把这些点连成线,形成曲线。
VC++ MFC 正则表达式编程小例
在MFC中,正则表达式的实现基于ATL(Active Template Library),具体体现在`CAtlRegEx`类。这个类提供了构建、编译和执行正则表达式的方法。


