在c语言中使用正则表达式

下面的代码转自那里忘了,稍做了修改
在C语言程序中处理正则表达式:  
   
  #include   <stdio.h>    
  #include   <sys/types.h>    
  #include   <regex.h>    
   
  /*   取子串的函数   */    
  static   char*   substr(const   char*str,  
  unsigned   start,   unsigned   end)    
  {    
  unsigned   n   =   end   -   start;    
  static   char   stbuf[256];    
  strncpy(stbuf,   str   +   start,   n);    
  stbuf[n]   =   0;    
  return   stbuf;    
  }    
  /*   主程序   */    
  int   main(int   argc,   char**   argv)    
  {    
  char   *   pattern;    
  int   x,   z,   lno   =   0,   cflags   =   0;    
  char   ebuf[128],   lbuf[256];    
  regex_t   reg;    
  regmatch_t   pm[10];    
  const   size_t   nmatch   =   10;    
  /*   编译正则表达式*/    
  pattern   =   argv[1];    
  z   =   regcomp($reg,   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($reg,   lbuf,   nmatch,   pm,   0);    
  if   (z   ==   REG_NOMATCH)   continue;    
  else   if   (z   !=   0)   {    
  regerror(z,   $reg,   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("%04d:   %s/n",   lno,   lbuf);    
  printf("   $%d='%s'/n",   x,   substr(lbuf,   pm[x].rm_so,  
  pm[x].rm_eo));    
  }    
  }    
  /*   释放正则表达式   */    
  regfree(?);    
  return   0;    
  }  
   
   
  执行下面的命令可以编译并执行该程序:    
   
   
  #   gcc   regexp.c   -o   regexp    
  #   ./regexp   'regex[a-z]*'   <   regexp.c    
  0003:   #include   <regex.h>    
  $0='regex'    
  0027:   regex_t   reg;    
  $0='regex'    
  0054:   z   =   regexec(?,   lbuf,   nmatch,   pm,   0);    
  $0='regexec'    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值