C语言正则表达式

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  /* 主程序 */

  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(®, 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("%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

  $0='regex'

  0027: regex_t reg;

  $0='regex'

  0054: z = regexec(®, lbuf, nmatch, pm, 0);

  $0='regexec'

  小结

  对那些需要进行复杂数据处理的程序来说,正则表达式无疑是一个非常有用的工具。本文重点在于阐述如何在C语言中利用正则表达式来简化字符串处理,以便在数据处理方面能够获得与Perl语言类似的灵活性。

  编辑特别推荐:

  stdin,stdout,stderr详解

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答