简单写一下正则表达式的一个常用的工具,PCRE,用法还算简单,直接上代码了:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pcre.h"
#include <unistd.h>
#include <iostream>
#define N 10240
#define M 30
int main(int argc, char *argv[])
{
const char *error;
pcre *re;
int erroffset;
int ovector[M];
int rc = 0, i = 0;
char buffer[N];
memset(buffer, 0, N);
char src[N] = "<title>Hello World</tiiitttitle>";
char pattern[] = "<title>(.*)</[t|i]+le>";
printf("The string is %s\t%d\n", src, strlen(src));
printf("The pattern is %s\n", pattern);
re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
if(NULL == re)
{
printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
exit(-1);
}
rc = pcre_exec(re, NULL, src, strlen(src), 0, 0, ovector, M);
if(rc < 0)
{
printf("NO match...\n");
exit(-1);
}
char *p = &src[0];
char line[1024];
int ind1 = 0, ind2 = 0;
for(i = 0; i < rc; ++ i)
{
p = &src[0];
ind1 = ovector[2 * i];
ind2 = ovector[2*i + 1];
p = p + ind1;
strncpy(line, p, ind2 - ind1);
line[ind2 - ind1] = 0;
printf("The start %d %c, the end is %d %c\t\t", ind1, src[ind1], ind2, src[ind2]);
printf("The NO. %d is %s\n", i, line);
}
pcre_free(re);
return 0;
}
上面的代码中需要说的是有几个函数:
re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
编译正则表达式;
rc = pcre_exec(re, NULL, src, strlen(src), 0, 0, ovector, M);
正则表达式的执行,匹配的结果存于ovector数组中;
pcre_free(re); 释放正则表达式的空间;
详细的一些参数需要查一下函数怎么用