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:
parent
977238f69e
commit
87b70c8358
3 changed files with 65 additions and 13 deletions
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 :
|
||||
** -char *pat -> pattern string to be looking for match
|
||||
** -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)
|
||||
|
|
@ -39,15 +39,66 @@ static void ft_tabdel(char ***mytab)
|
|||
*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);
|
||||
}
|
||||
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)
|
||||
{
|
||||
char *fix;
|
||||
|
||||
(void)pat;
|
||||
fix = str + ft_strlen(str);
|
||||
return (1);
|
||||
}
|
||||
|
|
@ -60,7 +111,7 @@ static int match_pattern(const char *pat, char *str)
|
|||
str++;
|
||||
else if (*pat == '[')
|
||||
{
|
||||
if (!match_bracket(&pat, &str))
|
||||
if (!match_bracket(&pat, *str))
|
||||
return (0);
|
||||
}
|
||||
else if (*pat == '*')
|
||||
|
|
@ -73,6 +124,7 @@ static int match_pattern(const char *pat, char *str)
|
|||
else if (*pat != *str)
|
||||
return (0);
|
||||
++str;
|
||||
++pat;
|
||||
}
|
||||
return (*str ? 0 : 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue