[英]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()
。
發布的代碼有兩個問題:
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.