正则表达式匹配(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++ ,