标签: 正则表达式数据结构字符串函数库linuxC |
分类:shell |
#include<stdio.h>;
#include<sys/types.h>;
#include <regex.h>;
#include<string.h>
static char* substr(constchar*str, unsigned start, unsigned end)
{
unsigned n =end - start;
staticchar stbuf[256];
strncpy(stbuf, str + start, n);
stbuf[n] = 0;
returnstbuf;
}
int main(int argc, char** argv)
{
char *pattern;
int x, z,lno = 0, cflags = 0;
charebuf[128], lbuf[256];
regex_t reg;
regmatch_t pm[10];
const size_tnmatch = 10;
pattern = argv[1];
z = regcomp(®, pattern,cflags);
if (z !=0){
regerror(z,®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);
return 1;
}
while(fgets(lbuf, sizeof(lbuf), stdin)) {
++lno;
if ((z = strlen(lbuf)) >0&& lbuf[z-1] == '\n')
lbuf[z -1] = 0;
z =regexec(®, lbuf, nmatch, pm, 0);
if (z == REG_NOMATCH) continue;
else if(z != 0) {
regerror(z, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s:regcom('%s')\n", ebuf, lbuf);
return 2;
}
for (x = 0; x < nmatch&& pm[x].rm_so != -1; ++ x) {
if (!x) printf("d: %s\n", lno, lbuf);
printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));
}
}
regfree(®);
return0;
}
编译执行
bitwangbin@mac:~/code/c/regex > gcc regexp.c -oregexp
bitwangbin@mac:~/code/c/regex > ./regexp 'regex[a-z]*' < regexp.c
0003: #include <regex.h>;
$0='regex'
0020: regex_t reg;
$0='regex'
0037: z =regexec(®, lbuf, nmatch, pm, 0);
$0='regexec'