ATL正则表达式库使用
2006-07-21 11:45:51 来源:WEB开发网核心提示: class MyRegTraits : public ATL::CAtlRECharTraitsA{public:static const RECHARTYPE** GetAbbrevs(){static const RECHARTYPE *s_szAbbrevs[] ={"a(
class MyRegTraits : public ATL::CAtlRECharTraitsA
{
public:
static const RECHARTYPE** GetAbbrevs()
{
static const RECHARTYPE *s_szAbbrevs[] =
{
"a([a-zA-Z0-9])", // alpha numeric
"b([ \\t])", // white space (blank)
"c([a-zA-Z])", // alpha
"d([0-9])", // digit
"h([0-9a-fA-F])", // hex digit
"n(\r|(\r?\n))", // newline
"q(\"[^\"]*\")|(\''''[^\'''']*\'''')", // quoted string
"w([a-zA-Z]+)", // simple word
"z([0-9]+)", // integer
"e([0-8]+)", //自己添加
NULL
};
return s_szAbbrevs;
}
};
让我们自己定义的Trait类继承自CAtlRECharTraitsA,然后改写GetAbbrevs()函数,增加 一些需要的简写就可以被使用了。下面的代码示例了使用了我们自己的类中定义的“\e”简 略表达:
int main ( )
{
ATL::CAtlRegExp < MyRegTraits > re ;
re.Parse( "\\e+" );
ATL::CAtlREMatchContext < MyRegTraits > mc ;
BOOL res1 = re.Match( "678", &mc ); // returns TRUE: successful match
res1 = re.Match ( "999" , &mc ) ; // returns FALSE:match fail
}
只要在构造ATL::CAtlRegExp和 ATL::CAtlREMatchContext类时,传递过去我们的 MyRegTraits类作为Traits的参数,就可以直接使用自己定义的简略符号了。
5、 结尾
虽然现在C++的社区里已经拥有了Boost::regex,GRETA等非常著名的正则表达式库,可是 作为VC++自带的模板库,ATL中的正则表达式库仍然给我们的工作提供了极大的便利。由于 ATL是微软官方发布的Library,所以它拥有良好的文档说明、严格的测试以及微软官方的 技术支持。另外在用ATL开发COM组件的时候,更可以方便地利用正则库的巨大威力。
由于本人学识所限,文章内容错在所难免,如有批评指正之词,请mail :firingme@sina.com
更多精彩
赞助商链接