C中的正则表达式

时间:2009-08-25 21:29:35

标签: c regex

现在使用C#或PHP进行正则表达式非常容易。但是目前我需要在C中使用正则表达式。而且,我似乎并不完全理解regcomp或regexec的用法。这绝对是因为我缺乏C语言经验。

非常感谢任何帮助和示例!

5 个答案:

答案 0 :(得分:7)

使用PCRE库。示例包含在demo/目录中的源中。 Here's a direct link to pcredemo.c

答案 1 :(得分:5)

这可能会让您开始,因为您指出了regex(3)个功能。以下是一个与其参数相匹配的简单程序。但是,如果您对C相对较新,那么您将希望慢慢使用regex(3),因为您将使用指针和数组以及regmatch_t - 提供的偏移和狮子以及老虎和熊。 ;)

$ ./regexec '[[:digit:]]'   56789  alpha  "   "  foo12bar
matched: 56789
matched: foo12bar
$ ./regexec '[[:digit:]](foo'
error: Unmatched ( or \(
$ ./regexec '['
error: Invalid regular expression

......和来源:

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>

int main(int argc, char **argv) {
  int r;
  regex_t reg;

  ++argv;  /* Danger! */

  if (r = regcomp(&reg, *argv, REG_NOSUB|REG_EXTENDED)) {
    char errbuf[1024];
    regerror(r, &reg, errbuf, sizeof(errbuf));
    printf("error: %s\n", errbuf);
    return 1;
  }

  for (++argv; *argv; ++argv) {
    if (regexec(&reg, *argv, 0, NULL, 0) == REG_NOMATCH)
      continue;
    printf("matched: %s\n", *argv);
  }

  return 0;
}

答案 2 :(得分:2)

您需要一个提供它的库,有几个可供选择。 PCRE就是一个。

答案 3 :(得分:1)

还有libslack(str) - 字符串模块:

http://libslack.org/manpages/str.3.html

答案 4 :(得分:0)

gnu C库有一个regex library