le match fonctionne avec les [ab], les [a-z] les [^ ou avec le ! a-z] et Il manque encore le * et les {}. Gestion du ~ a ajouter aussi

This commit is contained in:
wescande 2017-01-12 18:43:27 +01:00 committed by Jack Halford
parent 977238f69e
commit 87b70c8358
3 changed files with 65 additions and 13 deletions

View file

@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */
/* Updated: 2017/01/05 16:20:32 by wescande ### ########.fr */ /* Updated: 2017/01/12 17:14:38 by wescande ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */
/* Updated: 2017/01/05 20:09:14 by wescande ### ########.fr */ /* Updated: 2017/01/12 18:37:44 by wescande ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -18,7 +18,7 @@
** input parameters are : ** input parameters are :
** -char *pat -> pattern string to be looking for match ** -char *pat -> pattern string to be looking for match
** -char **env -> env var. could be NULL ** -char **env -> env var. could be NULL
to just expanse in local directory and not in path ** to just expanse in local directory and not in path
*/ */
static void ft_tabdel(char ***mytab) static void ft_tabdel(char ***mytab)
@ -39,15 +39,66 @@ static void ft_tabdel(char ***mytab)
*mytab = NULL; *mytab = NULL;
} }
static int match_bracket(const char **pat, char **str) static int match_bracket_char(char **cmp, const char *pat, char c, int neg)
{
int dir;
char s;
if ((*cmp + 2) < pat && (*cmp)[1] == '-' && (s = (*cmp)[0]))
{
dir = s > (*cmp)[2];
while ((dir && s >= (*cmp)[2]) || (!dir && s <= (*cmp)[2]))
{
if (!neg && s == c)
return (1);
else if (neg && s == c)
return (0);
s += (dir * -2 + 1);
}
*cmp += 2;
}
else if (!neg && **cmp == c)
{ {
return (1); return (1);
} }
else if (neg && **cmp == c)
{
return (0);
}
return (-1);
}
static int match_bracket(const char **pat, char c)
{
char *cmp;
int neg;
int ret;
cmp = (char *)*pat + 1;
while (**pat != ']')
{
if (!**pat)
return (0);
++*pat;
}
neg = 0;
if ((*cmp == '^' || *cmp == '!') && ++neg)
++cmp;
while (cmp < *pat)
{
ret = match_bracket_char(&cmp, *pat, c, neg);
if (ret != -1)
return (ret);
++cmp;
}
return (neg);
}
static int match_star(const char *pat, char *str) static int match_star(const char *pat, char *str)
{ {
char *fix; char *fix;
(void)pat;
fix = str + ft_strlen(str); fix = str + ft_strlen(str);
return (1); return (1);
} }
@ -60,7 +111,7 @@ static int match_pattern(const char *pat, char *str)
str++; str++;
else if (*pat == '[') else if (*pat == '[')
{ {
if (!match_bracket(&pat, &str)) if (!match_bracket(&pat, *str))
return (0); return (0);
} }
else if (*pat == '*') else if (*pat == '*')
@ -73,6 +124,7 @@ static int match_pattern(const char *pat, char *str)
else if (*pat != *str) else if (*pat != *str)
return (0); return (0);
++str; ++str;
++pat;
} }
return (*str ? 0 : 1); return (*str ? 0 : 1);
} }

View file

@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ /* Created: 2017/01/05 16:09:40 by wescande #+# #+# */
/* Updated: 2017/01/05 16:31:36 by wescande ### ########.fr */ /* Updated: 2017/01/12 15:48:03 by wescande ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */