bonsoir à tous,
J'ai besoin pour mon programme de convertir une chaine de ce style:
en une expression régulière, ce qui veut dire qu'il faut que j'echappe tout les caractères '*' '?' et '.'moi*!*@mon.host.*
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
la fonction:
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);
résultat:
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; }
La fonction fonctionne mais je pense qu'il a vraiment moyen de faire mieux,convert: Cory!.*@192\\..*
merci à vous et bonne soirée.
Partager