ATL正则表达式库使用
2006-07-21 11:45:51 来源:WEB开发网核心提示:ATL中,由于ATL Server的需要,ATL正则表达式库使用,需要对Client发送过来的地址、命令等复杂文字字段信息解码,而正则表达式是公认的最强大的文字解析工具,Match的结果通过第二个参数pContext所指向的CAtlREMatchContext<>类来返回,Match 的结果及其相关信息都被
ATL中,由于ATL Server的需要,需要对Client发送过来的地址、命令等复杂文字字段信息解码,而正则表达式是公认的最强大的文字解析工具,所以,ATL提供了一些用于正则表达式的库方便了我们的工作。
1、 CATLRegExp类
声明:
template <class CharTraits=CAtlRECharTraits>
class CAtlRegExp;
初始化:
与微软的GRETA类库(微软研究院推出的另一个正则表达式类库)不同,CATLRegExp并没有在构造函数中提供初始化匹配字符串的方法,而是让使用者通过调用它的Parse()方法,使用正则表达式字符串作为参数,就可以构造出一个我们所需要的用于匹配的类,例如我们需要匹配一种时间格式,可以是h:mm、也可以是hh:mm,那么我们可以这样构造我们的CAtlRegExp类:
CAtlRegExp <> re;
re.Parse( "{[0-9]?[0-9]}:{[0-9][0-9]}" );
ATL的正则表达式语法和Perl的正则表达式语法大同小异,不过有一个值得注意的地方就 是ATL中用大括号({ })表示其匹配字符串中的Group,我们上面的表达式中,就声明了2 个Group,一个是[0-9]?[0-9],另一个是[0-9][0-9]。
匹配:
调用CATLRegExp的Match()方法,就可以用该类来进行匹配了,Match方法的原型如下:
BOOL Match(const RECHAR *szIn, CAtlREMatchContext<CharTraits> *pContext, const RECHAR **ppszEnd=NULL)
参数的含义很明显,不过需要注意到第一个参数的型别是:const RECHAR * szIN,是一个 const指针,这表明我们可以方便得使用std::string类的c_str()方法给其传递参数。
Match的结果通过第二个参数pContext所指向的CAtlREMatchContext<>类来返回,Match 的结果及其相关信息都被存放在CAtlREMatchContext类中,我们只要访问CAtlREMatchContext的方法和成员就可以得到匹配的结果。
[]
更多精彩
赞助商链接