C中的正则表达式匹配

Regex matching in C

我正在编写一个解析器来分析传入参数的内容并与正则表达式进行比较。 如果找到变量结构,此解析器应该 return 布尔值:

int a;

double abc;

char test;

那些变量应该匹配但不...

这是我的代码,我认为我的正则表达式是正确的..

#include "includes.h"

int check_match_var(char *str)
{
  int err;
  int match;
  regex_t preg;
  char err_buf[BUFSIZ];
  const char *regex = "/^(int|char|float|double) [a-zA-Z0-9]{1,};/";

  err = regcomp(&preg, regex, 0);
  printf("Err : %d\n", err);
  if (err == 0)
    {
      match = regexec(&preg, str, 0, NULL, 0);
      regfree(&preg);
      if (match == 0)
    printf("Match !\n");
      else
    printf("No match !\n");
    }
  else
    {
      regerror(err, &preg, err_buf, BUFSIZ);
      printf("regcomp: %s\n", err_buf);
      return (1);
    }
  return (0);
}

int marvin(char **av)
{
  check_match_var(av[1]);
  return (0);
}

int main(int ac, char **av)
{
  if (ac == 2)
    {
      marvin(av);
    }
  else
    printf("\n");
  return (0);
}

反正是return1(不匹配),我要return0(匹配)..

包括文件:

#ifndef INCLUDES_H_

#define INCLUDES_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h> 
#endif

感谢帮助

该代码使用 <regex.h> 中的 POSIX 正则表达式代码。您可以在线找到有关 regcomp()regexec() 的信息。

贴出的代码有两个问题:

  1. Paul Roub correctly 不需要正则表达式字符串中的斜杠。

  2. Jonathan Leffler correctly regcomp()regexec() 处理的正则表达式是 'basic regular expressions' 或 BRE,但表示法试图使用 'extended regular expressions' 或 ERE。请求 ERE 支持的方法是通过 REG_EXTENDED 标志作为 regcomp().

  3. 的第三个参数中的标志之一

, user3486006 中确认两个更改(并将 REG_NOSUB 添加到 regcomp())意味着它有效。请参阅手册页了解 REG_NOSUB 的作用;无论有没有标志,比赛都可以工作,但在这种情况下添加标志是明智的。

社区 Wiki 回答:如果 Paul 发布了回答,请采纳。