/*String*/
Ipp8u *srcString = (Ipp8u *)"Hello World!";
/*1st pattern*/
char *pattern1 = "Hello";
/*2nd pattern*/
char *pattern2 = "World";
/*3rd pattern*/
char *pattern3 = ".$";
/*4th pattern*/
char *pattern4 = "0 W";
IppRegExpState* pRegExpState1;
IppRegExpState* pRegExpState2;
IppRegExpState* pRegExpState3;
IppRegExpState* pRegExpState4;
/*3 patterns will be used*/
int nPatterns = 3;
int numMatch = 30;
int pErrOffset, i, k;
IppRegExpMultiFind pMultiFind[3];
IppRegExpMultiState* pState=NULL;
/*Init multi pattern search engine*/
ippsRegExpMultiInitAlloc(&pState,nPatterns);
for(i=0;i<nPatterns;i++) {
pMultiFind[i].pFind = (IppRegExpFind*)ippMalloc(numMatch*sizeof(IppRegExpFind));
pMultiFind[i].numMultiFind = numMatch;
}
/*Compile 1st pattern*/
ippsRegExpInitAlloc(pattern1, NULL,&pRegExpState1, &pErrOffset);
ippsRegExpSetMatchLimit(numMatch,pRegExpState1);
/*Compile 2nd pattern*/
ippsRegExpInitAlloc(pattern2, NULL,&pRegExpState2, &pErrOffset);
ippsRegExpSetMatchLimit(numMatch,pRegExpState2);
/*Compile 3rd pattern*/
ippsRegExpInitAlloc(pattern3, NULL,&pRegExpState3, &pErrOffset);
ippsRegExpSetMatchLimit(numMatch,pRegExpState3);
/*Compile 4th pattern*/
ippsRegExpInitAlloc(pattern4, NULL,&pRegExpState4, &pErrOffset);
ippsRegExpSetMatchLimit(numMatch,pRegExpState4);
/*Add 1st, 2nd, and 3rd patterns*/
ippsRegExpMultiAdd(pRegExpState1, 1, pState);
ippsRegExpMultiAdd(pRegExpState2, 2, pState);
ippsRegExpMultiAdd(pRegExpState3, 3, pState);
/*Match*/
ippsRegExpMultiFind_8u( (const Ipp8u*)srcString, 12, pState, pMultiFind);
/*Output:
RegExpID = 1
Matches = 1
Hello
RegExpID = 2
Matches = 1
World
RegExpID = 3
Matches = 1
!*/
/*Replace 2nd pattern by 4th pattern*/
ippsRegExpMultiModify(pRegExpState4, 2, pState);
/*Delete 3rd pattern*/
ippsRegExpMultiDelete(3, pState);
/*Reset destination structure*/
for(i=0;i<nPatterns;i++) {
pMultiFind[i].numMultiFind = numMatch;
}
/*Match*/
ippsRegExpMultiFind_8u( (const Ipp8u*)srcString, 13, pState, pMultiFind);
/*Output:
RegExpID = 1
Matches = 1
Hello
RegExpID = 2
Matches = 1
o W*/
/*Free memory*/
ippsRegExpMultiFree(pState);
ippsRegExpFree(pRegExpState1);
ippsRegExpFree(pRegExpState2);
ippsRegExpFree(pRegExpState3);
ippsRegExpFree(pRegExpState4);
for(i=0;i<nPatterns;i++) {
ippFree(pMultiFind[i].pFind);
}
Copyright © 2000 - 2010, Intel Corporation. All rights reserved.