/*
* @Method: ExtractText
* @Note: 从一段文本中提取起始结束标记中间的部分
1,若文本包含起始结束标记,则提取中间部分
2,若文本有起始标记,但无结束标记,则从起始标记开始,直到结束
3,若文本没有起始标记,则返回失败
* @FullName: ExtractText
* @Access: public
* @Returns: int
* @Qualifier:
* @Parameter: const char * pText 源文本
* @Parameter: const char * pBegin 起始标记
* @Parameter: const char * pEnd 结束标记
* @Parameter: char * pOutBuf 结果缓冲区
*/
int ExtractText(const char *pText, const char *pBegin, const char *pEnd, char *pOutBuf)
{
if (pText == NULL || pOutBuf == NULL)
{
return 0;
}
char *pTmp = (char *)pText;
char cBeginCopy = 0;
char cIsFindA = 0;
while (*pTmp++ != '\0')
{
if (!cBeginCopy)
{
if (strncmp(pTmp, pBegin, strlen(pBegin)) == 0)
{
cBeginCopy = 1;
cIsFindA = 1;
pTmp += (strlen(pBegin) - 1);//跳过起始标记开始复制
}
}
else
{
if (strncmp(pTmp, pEnd, strlen(pEnd)) == 0)
{
break;
}
*pOutBuf = *pTmp;
pOutBuf ++;
}
}
return cIsFindA;
}
测试代码:
int main(int argc, char *argv[])
{
//包含起始结束标记
char *pTest = "1234a1hello world!b1111";
//包含起始标记,但无结束标记
char *pTest1 = "1234a1hello world!b";
//无起始标记
char *pTest2 = "1234ahello world!b";
char cBuf[100] = {0};
if (ExtractText(pTest, "a1", "b1", cBuf))
{
printf("%s\n", cBuf);
}
else
{
printf("Extract error!\n");
}
if (ExtractText(pTest1, "a1", "b1", cBuf))
{
printf("%s\n", cBuf);
}
else
{
printf("Extract error!\n");
}
if (ExtractText(pTest2, "a1", "b1", cBuf))
{
printf("%s\n", cBuf);
}
else
{
printf("Extract error!\n");
}
return 0;
}
测试结果: