在网上看到很多人在C/C++下寻求正则表达式的库,有的老大往往推荐boost,但是一般的linux distribution已经体贴地为我们想到这一点,利用regexec等API,可以较为完美的解决一些比如(A|B)这样的匹配问题。
/*
在目标文件中逐行进行正则表达式匹配
*/
#include <regex.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
static const char* src = "(PROXY|bee)";//匹配条件
regex_t regexp;
regcomp(®exp,src,REG_EXTENDED);
bool matchFlag = false;
char targetStr[128] = "this is aawa baee joke";
ifstream file("test.txt");//目标文件
int iLine = 1;
while(file.getline(targetStr,128,'/n'))
{
cout<<"--------------------------------------------"<<endl;
matchFlag = (regexec(®exp,targetStr,0,0,0) == 0);
if(matchFlag)
{
cout<<"match at line: ["<<iLine<<"]"<<endl;
cout<<"content is : "<<targetStr<<endl;
}
else
{
cout<<"not match at line : ["<<iLine<<"]"<<endl;
}
iLine++;
}
regfree(®exp);
return 0;
}
/*
在目标文件中逐行进行正则表达式匹配
*/
#include <regex.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
static const char* src = "(PROXY|bee)";//匹配条件
regex_t regexp;
regcomp(®exp,src,REG_EXTENDED);
bool matchFlag = false;
char targetStr[128] = "this is aawa baee joke";
ifstream file("test.txt");//目标文件
int iLine = 1;
while(file.getline(targetStr,128,'/n'))
{
cout<<"--------------------------------------------"<<endl;
matchFlag = (regexec(®exp,targetStr,0,0,0) == 0);
if(matchFlag)
{
cout<<"match at line: ["<<iLine<<"]"<<endl;
cout<<"content is : "<<targetStr<<endl;
}
else
{
cout<<"not match at line : ["<<iLine<<"]"<<endl;
}
iLine++;
}
regfree(®exp);
return 0;
}