首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请大家帮小弟我看看这段有关正则表达式的代码

2012-08-17 
请大家帮我看看这段有关正则表达式的代码#include iostream#include vector#include string#include

请大家帮我看看这段有关正则表达式的代码
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <iomanip>
#include <fstream>
#include "regex.h"
using namespace std;
int iFunBellRadioAnalyzeAlarm(string sOrgReportBuff);
int iFunMatchString (char *pcPattern,char *pcMark,vector<string> &pcGetMatched);
int main(){
string alarmInfo = "20120613031311.4Z;He_Chi10_MX2-1 Abis TP 53[_53];major (2);communicationsAlarm;X721-lossOfFrame;190342 BSC-TRANS [101] LFA [2];();();((Alcatel Additional Information significant Additional Information is ) (Alcatel Additional Information significant -- OMC3 ALARM --) (urlAddressOnAlarmDictionary significant https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=101002 190342));1;unAcknowledged (0);cleared (1);20120613031312.0Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#9/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#53;20120613092957.0Z;manualPurge (3);1;";
  int hi = iFunBellRadioAnalyzeAlarm(alarmInfo);
}


int iFunBellRadioAnalyzeAlarm(string sOrgReportBuff)
{  
char pcOrgReportBuff[5096];
memset(pcOrgReportBuff,0,sizeof(pcOrgReportBuff));
sprintf(pcOrgReportBuff,"%s",sOrgReportBuff.c_str());

char * pcRes;
char * pcMark;
char cRes;

int iRet;
int iLoop;
char acPattern[512];
vector<string> pcGetMatched;
pcMark = pcOrgReportBuff;
memset ( acPattern , 0 , sizeof ( acPattern ) ) ;
sprintf ( acPattern , "%s" ,"([0-9]+[.]+[0-9A-Z]+);");
iRet = iFunMatchString ( acPattern,pcMark,pcGetMatched) ;
if(iRet == -1)
{
cout<<"解析失败!"<<endl;
return -1 ;
}
string sAlmFrdName;
sAlmFrdName = pcGetMatched[0];
pcGetMatched.clear();
pcMark = pcMark +iRet;

//------------------------------Get Alarm Object-------------------------
memset (acPattern ,0 , sizeof(acPattern));
sprintf ( acPattern ,"%s" ,"[[:alnum:]*-_ \\[\\]]*;");
cout<<"此时需要处理的字符串为:"<<pcMark<<endl;
cout<<"此时匹配的正则表达式为:"<<acPattern<<endl;
iRet = iFunMatchString (acPattern,pcMark,pcGetMatched);
if(iRet == -1)
{
cout<<"解析失败!"<<endl;
return -1 ;
}
string sAlmObj = pcGetMatched[0];
cout<<"alarmobject:"<<sAlmObj<<endl;
}

int iFunMatchString (char *pcPattern,char *pcMark,vector<string> &pcGetMatched)
{

int iRet ;
int iLoop ;

const int STRINGLEN = 1024;
const int SUBLEN = 64;

size_t sLen ;
regex_t sRegex ;
regmatch_t acMatched [SUBLEN] ;

char acErrBuffer [ STRINGLEN ] ;
char acMatchedTemp [STRINGLEN *5];
memset(acMatchedTemp,0,sizeof(acMatchedTemp));
memset ( acErrBuffer , 0 , sizeof ( acErrBuffer ) ) ;
iRet = regcomp ( &sRegex , pcPattern , REG_EXTENDED|REG_NEWLINE ) ;
if ( iRet != 0 ) 
{
sLen = regerror ( iRet , &sRegex , acErrBuffer , sizeof ( acErrBuffer ) ) ;
return -1 ;
}

iRet = regexec ( &sRegex , pcMark , ( size_t )SUBLEN , acMatched , 0 ) ;
if ( iRet == REG_NOMATCH ) 
{
regfree ( &sRegex ) ;
return -1 ;
}

for ( iLoop = 0 ; iLoop < sRegex.re_nsub ; iLoop ++ ) 
{
sLen = acMatched [ iLoop + 1 ].rm_eo - acMatched [ iLoop + 1 ].rm_so ;
if ( sLen > sizeof (acMatchedTemp) )
  memcpy ( acMatchedTemp , pcMark + acMatched [ iLoop + 1 ].rm_so , sizeof(acMatchedTemp)) ;
  else
  memcpy ( acMatchedTemp , pcMark + acMatched [ iLoop + 1 ].rm_so , sLen ) ;

  string tempStr = acMatchedTemp;


memset(acMatchedTemp,0,sizeof(acMatchedTemp));

pcGetMatched.push_back(tempStr);
}

regfree ( &sRegex ) ;
return acMatched[0].rm_eo ;
}

麻烦大家帮忙看看这个代码,要处理的字符串是:
He_Chi10_MX2-1 Abis TP 53[_53];major (2);communicationsAlarm;X721-lossOfFrame;190342 BSC-TRANS [101] LFA [2];();();((Alcatel Additional Information significant Additional Information is ) (Alcatel Additional Information significant -- OMC3 ALARM --) (urlAddressOnAlarmDictionary significant https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=101002 190342));1;unAcknowledged (0);cleared (1);20120613031312.0Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#9/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#53;20120613092957.0Z;manualPurge (3);1;
正则表达式是:[[:alnum:]*-_ \[\]]*;
匹配的结果却为:20120613031311.4Z

想要的结果是:He_Chi10_MX2-1 Abis TP 53[_53];
请大家帮忙看看是哪里出的问题,谢谢大家了

[解决办法]
真心不懂,帮顶。

热点排行