当前位置:编程学习 > C/C++ >>

正则表达式匹配(c/c++)非注释部分

最近在写一个C++的parser,里面有一个功能是要解析出所有有效的头文件。如有文件片段如下:
 
#include <QObject>  
#include <QStringList>  
#include <QVariant>  
#include <QMap>  
#include <QVariantMap>  
#include <QVariantList>  
  
/* #include <aaa.h> */  
/*#include <aaa.h> */  
/* #include <aaa.h>*/  
/*#include <aaa.h>*/  
  
#include <test>  
  
/* 
 #include <aaa.h> */  
  
/* #include <aaa.h>  
*/  
  
/*  
#include <aaa.h>  
*/  
  
/*  
    #include <aaa.h>  
*/  
  
// #include <aaa.h>   
  // #include <aaa.h>   
    // #include <aaa.h>   

 

需要从中检索出QObject,QStringList,QVariant,QMap,QVariantMap,QVariantList,test这几个有效的头文件(去除注释掉的)。
要完成这样的检索我们有很多方法,正则表达式是一种比相对比较便捷的方法。在这里要匹配的头文件要去除注释掉的部分,实质上也就是把前面是/*或者//的情况过滤掉。对应在正则表达式中我们可以使用负前后查找(负零宽度断言)来实现。表达式如下:
(?<!(\s*/\*\s*)|(\s*//\s*))\#include\s*[<"]+([\w+\.h]+)[">]*(?!\s*\*/\s*)
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,