WEB开发网
开发学院软件开发VC ATL正则表达式库使用 阅读

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

上一页  1 2 3 4 

Tags:ATL 正则 表达式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接