linux c语言正则表达式,linux C正则表达式

1.程序源码

#include

#include

#include

#include

/*取子串的函数*/

static char *substr(const char *str, unsigned int start, unsigned int end)

{

static char stbuf[256];

unsigned int n = end - start;

memcpy(stbuf, str+start, n);

stbuf[n] = 0x00;

return stbuf;

}

int main(int argc, char **argv)

{

regmatch_t pm[10];

regex_t reg;

char ebuf[128];

char lbuf[256];

char *pattern;

int x, z, w = 0;

int cflags =0;

const size_t nmatch = 10;

if(argc < 2)

return -1;

pattern = argv[1];

/*编译正则表达式*/

z = regcomp(&reg, pattern, cflags);

if(z != 0)

{

regerror(z, &reg, pattern, cflags);

fprintf(stderr, "%s: pattern'%s'\n", ebuf, pattern);

return -1;

}

/*逐行处理输入数据*/

while(fgets(lbuf, sizeof(lbuf), stdin))

{

++w;

if((z=strlen(lbuf)) > 0 && lbuf[z-1] == '\n')

lbuf[z-1] = 0x00;

/*对每一行应用正则表达式匹配*/

z = regexec(&reg, lbuf, nmatch, pm, 0);

if(z == REG_NOMATCH)

continue;

else if(z != 0)

{

regerror(z, &reg, ebuf, sizeof(ebuf));

fprintf(stderr, "%s: regexec('%s')\n", ebuf, lbuf);

return -2;

}

/*输出处理结果*/

for(x=0; x

{

if(!x)

printf("%04d: %s\n", w, lbuf);

printf("$%d=%s\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));

}

}

/*释放正则表达式*/

regfree(&reg);

return 0;

}

2.编译源码

$ gcc -o regex regex.c

3.运行程序及其结果

$ ./regex 'regex[a-z]*' < regex.c

0004: #include

$0=regex

0022: regex_t reg;

$0=regex

0053: z = regexec(&reg, lbuf, nmatch, pm, 0);

$0=regexec

0059: fprintf(stderr, "%s: regexec('%s')\n", ebuf, lbuf);

$0=regexec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值