簡體   English   中英

C中的正則表達式匹配

[英]Regex matching in C

我正在編寫一個解析器,用於分析參數中傳遞的內容並與正則表達式進行比較。 如果發現變量的結構,則此解析器應返回boolean:

詮釋

雙abc;

字符測試;

這些變量應該匹配,但不匹配...

這是我的代碼,我以為我的正則表達式是正確的。

#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);
}

無論如何,它返回1(不匹配),我希望它返回0(匹配)。

包含文件:

#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正確地識別出正則表達式字符串中的斜杠不是必需的。

  2. Jonathan Leffler正確地確定regcomp()regexec()處理的正則表達式是“基本正則表達式”或BRE,但該表示法試圖使用“擴展正則表達式”或ERE。 請求ERE支持的方法是通過REG_EXTENDED標志作為regcomp()的第三個參數中的標志之一。

注釋中user3486006確認這兩個更改(並將REG_NOSUB添加到regcomp() )都意味着它可以工作。 有關REG_NOSUB功能,請參見手冊頁。 匹配在有或沒有標志的情況下都可以進行,但是在這種情況下添加標志是明智的。

社區Wiki答案:如果Paul發布了答案,請接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM