convertir chaine en expression régulière
bonsoir à tous,
J'ai besoin pour mon programme de convertir une chaine de ce style:
Citation:
moi*!*@mon.host.*
en une expression régulière, ce qui veut dire qu'il faut que j'echappe tout les caractères '*' '?' et '.'
J'ai réussi a écrire cette fonction, cependant je la trouve vraiment dégueulasse
J'aurai donc besoin de votre aide pour l'améliorer
Code:
1 2 3 4 5 6 7
|
char *host = strdup("Cory!*@192.*");
char *tmphost = convertForRegexp(host);
printf("convert: %s\n", tmphost);
free(host); |
la fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
static char *convertForRegexp(char *string)
{
static char result[250];
char c, *p = string;
unsigned int i = 0;
while ((c = *p++))
{
if (c == '*' || c == '?')
{
result[i++] = '.';
result[i++] = *string++;
}
else if (c == '.')
{
result[i++] = '\\';
result[i++] = '\\';
result[i++] = *string++;
}
else result[i++] = *string++;
}
result[i] = 0;
return result;
} |
résultat:
Citation:
convert: Cory!.*@192\\..*
La fonction fonctionne mais je pense qu'il a vraiment moyen de faire mieux,
merci à vous et bonne soirée.