wc2regex.c 700 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <grass/gis.h>
  2. char *wc2regex(const char *wc)
  3. {
  4. int i, j;
  5. char *regex;
  6. for (i = 0, j = 2; wc[i]; i++, j++) {
  7. switch (wc[i]) {
  8. case '.':
  9. case '*':
  10. j++;
  11. break;
  12. }
  13. }
  14. regex = (char *)G_malloc(j + 1);
  15. j = 0;
  16. regex[j++] = '^';
  17. for (i = 0; wc[i]; i++) {
  18. switch (wc[i]) {
  19. case '.':
  20. regex[j++] = '\\';
  21. break;
  22. case '*':
  23. regex[j++] = '.';
  24. break;
  25. case '?':
  26. regex[j++] = '.';
  27. continue;
  28. case '{':
  29. regex[j++] = '(';
  30. continue;
  31. case '}':
  32. regex[j++] = ')';
  33. continue;
  34. case ',':
  35. regex[j++] = '|';
  36. continue;
  37. }
  38. regex[j++] = wc[i];
  39. }
  40. regex[j++] = '$';
  41. regex[j] = 0;
  42. return regex;
  43. }