#include <pcre.h>
#include <utilcls.h>
void __fastcall TForm7::Button1Click(TObject *Sender)
{
char szReg[]="(\\d{6})";
char szStr[]="get 100008 ...";
OLETRACE("正则式:%s",szReg);
OLETRACE("目标:%s",szStr);
const char *pszErr;
int nErrOffset;
pcre *re = pcre_compile(szReg,0,&pszErr,&nErrOffset,NULL);//先准备表达式
if(re==NULL)
{
OLETRACE("编译出错:%d,%s",nErrOffset,pszErr);
return ;
}
int ovector[30]={0};
int rc = pcre_exec(re,NULL,szStr,strlen(szStr),0,ovector,30);//执行匹配
if (rc <= 0)
{
return;
}
for (int i = 0; i < rc; i++)
{//ovector是一个整数数组,存储匹配的起始位置和结束位置(两个连续的元素为一组)
char * szStart = szStr + ovector[2 * i];
int nlength = ovector[2 * i + 1] - ovector[2 * i];
char szBuff[100]={0};
memcpy(szBuff,szStart,nlength);
OLETRACE("序号%d 长度%d >>>>>>%s", i, nlength, szBuff);
}
free(re);
}
匹配后会产生两个结果,不知为什么?