fork download
  1. #include <stdio.h>
  2. #include <regex.h>
  3.  
  4. int
  5. regex_match (char *pattern, const char *string,
  6. size_t sub_size, char **sub)
  7. {
  8. regmatch_t match[sub_size];
  9. size_t n;
  10. size_t m;
  11. size_t d;
  12. int status;
  13. regex_t re;
  14. status = regcomp (&re, pattern, REG_EXTENDED);
  15. if (status != 0)
  16. {
  17. return (status);
  18. }
  19. status = regexec (&re, string, sub_size, match, 0);
  20. if (status == 0)
  21. {
  22. for (n=0; n < sub_size; n++)
  23. {
  24. for (d = 0, m = match[n].rm_so;
  25. m >= 0 && m < match[n].rm_eo;
  26. m++, d++)
  27. {
  28. sub[n][d] = string[m];
  29. }
  30. sub[n][d] = '\0';
  31. }
  32. }
  33. regfree (&re);
  34. return (status);
  35. }
  36.  
  37. int
  38. main (void)
  39. {
  40. int result;
  41. char *string = "Ciao amore mio";
  42. char *re = "Ciao (amo)re";
  43. char sub0[200];
  44. sub0[0] = '\0';
  45. char sub1[200];
  46. sub1[0] = '\0';
  47. char *sub[] = {sub0, sub1};
  48.  
  49. result = regex_match (re, string, 2, sub);
  50.  
  51. if (result == 0)
  52. {
  53. printf ("Il modello \"%s\" trova corrispondenza ",
  54. re);
  55. printf ("nella stringa \"%s\", precisamente ",
  56. string);
  57. printf ("nella porzione \"%s\", mentre la ",
  58. sub[0]);
  59. printf ("sottostringa estratta è \"%s\".\n",
  60. sub[1]);
  61. }
  62. else
  63. {
  64. printf ("Il modello \"%s\" ", re);
  65. printf ("NON trova corrispondenza ");
  66. printf ("nella stringa \"%s\"\n", string);
  67. }
  68. return 0;
  69. }
Success #stdin #stdout 0.01s 1852KB
stdin
Standard input is empty
stdout
Il modello "Ciao (amo)re" trova corrispondenza nella stringa "Ciao amore mio", precisamente nella porzione "Ciao amore", mentre la sottostringa estratta è "amo".