C 如何使用正则表达式?

C 如何使用正则表达式?,c,regex,C,Regex,现在用C#或PHP编写正则表达式对我来说非常容易。然而,目前我需要在C中使用regex。而且,我似乎不完全理解regcomp或regexec的用法。这肯定是因为我缺乏C语言方面的经验。使用这个库。示例包含在源代码的demo/目录中 您需要一个提供该功能的库,有几种可供选择。是一个。gnu C库有一个这可能会让您开始,正如您所指出的regex(3)函数。下面是一个与参数匹配的普通程序。但是,如果您对C比较陌生,您将希望慢慢地使用regex(3),因为您将使用指针和数组以及regmatch\t提供的

现在用C#或PHP编写正则表达式对我来说非常容易。然而,目前我需要在C中使用regex。而且,我似乎不完全理解regcomp或regexec的用法。这肯定是因为我缺乏C语言方面的经验。

使用这个库。示例包含在源代码的
demo/
目录中

您需要一个提供该功能的库,有几种可供选择。是一个。

gnu C库有一个

这可能会让您开始,正如您所指出的
regex(3)
函数。下面是一个与参数匹配的普通程序。但是,如果您对C比较陌生,您将希望慢慢地使用
regex(3)
,因为您将使用指针和数组以及
regmatch\t
提供的偏移量、狮子、老虎和熊

。。。资料来源:

#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;
}
#包括
#包括
#包括
int main(int argc,字符**argv){
INTR;
regex_t reg;
++argv;/*危险*/
if(r=regcomp(®,*argv,reg_NOSUB | reg_EXTENDED)){
char errbuf[1024];
regerror(r,®,errbuf,sizeof(errbuf));
printf(“错误:%s\n”,errbuf);
返回1;
}
对于(++argv;*argv;++argv){
if(regexec(®,*argv,0,NULL,0)=reg\u NOMATCH)
继续;
printf(“匹配的:%s\n”,*argv);
}
返回0;
}
还有libslack(str)-字符串模块:


一个与perl兼容的正则表达式库-这不违反人权法案吗?PCRE几乎是一个标准,这使得编写者和维护者处理正则表达式更加容易。而且。。。我所需要的只是一个在C。。。TT@Dave:示例包含在PCRE分发中。查看
demo/
目录。是的,谢谢,我刚才也在看。它也有很好的例子!对于John和Dirk,我已经安装了PCRE,但我想我对它在C中的使用感兴趣。是的,我不知道如何使用它。。。也就是regcomp和regexec函数。对于其他任何看这个的人来说,约翰·米利金的答案也一样好。他提供的例子是PCRE,皮尔克罗的是GNU C Lib的regex,我相信。
#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;
}