bonsoir à tous,

J'ai besoin pour mon programme de convertir une chaine de ce style:

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
convert: Cory!.*@192\\..*
La fonction fonctionne mais je pense qu'il a vraiment moyen de faire mieux,
merci à vous et bonne soirée.