Я пишу парсер, анализирующий содержимое, переданное в параметре, и сравниваемое с регулярным выражением. Этот анализатор должен возвращать логическое значение, если найдена структура переменной:Соответствие регулярных выражений в C
int a;
double 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
Спасибо за помощь
Я не думаю, что регулярные выражения POSIX хотят иметь ведущие/конечные символы '/' - они могут рассматриваться как часть фактического шаблона регулярного выражения. –
Я добавил их после ошибки, пытаясь увидеть, что-то изменилось. – Teldar
В качестве основного этапа отладки распечатайте искомую строку, чтобы убедиться, что программа получила то, что, по вашему мнению, получила. –