Advertisement
Guest User

Untitled

a guest
Mar 1st, 2015
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. int rgrep_matches(char *line, char *pattern) {
  2.  
  3. int i = 0;
  4. while (line[i] != 0)
  5. {
  6. if ((line[i] == pattern[i] || pattern[i] == '.' ) && pattern[i] != '+' && pattern[i] != '?' && pattern[i] != '\\')
  7. {
  8. char a[MAXSIZE], b[MAXSIZE];
  9. int k = 0, m = 0, n = 0;
  10. while (pattern[k] != 0)
  11. {
  12. a[k] == pattern[k+1];
  13. if (a[k] > 0)
  14. k++;
  15. }
  16. while (line[m] != 0)
  17. {
  18. b[m] == line[m+1];
  19. if (b[m] > 0)
  20. m++;
  21. }
  22. n = rgrep_matches(a, b);
  23. if (n == 0)
  24. return 0;
  25.  
  26. }
  27.  
  28. else if (pattern[i+1] == '+' && pattern[i] != '\\')
  29. {
  30. int k = 0, l = 0, n = 0;
  31. while (line[i] != 0)
  32. {
  33. char b[MAXSIZE];
  34. for (k = 0; k < i; k++)
  35. b[k] = pattern[0];
  36. while (pattern[l] != 0)
  37. {
  38. if (pattern[l] == '+')
  39. {
  40. l++;
  41. continue;
  42. }
  43. b[k] = pattern[l];
  44. k++;
  45. l++;
  46.  
  47. }
  48. n = rgrep_matches(line, b);
  49. if (n == 0)
  50. return 0;
  51. }
  52.  
  53. }
  54. else if (pattern[i+1] == '?' && pattern[i] != '\\' && pattern[i] != '+' && pattern[i] != 0)
  55. {
  56. char a[MAXSIZE], b[MAXSIZE];
  57. int j = 0, match = -1, match1 = -1;
  58. if (match != 0)
  59. {
  60. while (pattern[j+1] != 0)
  61. {
  62. a[j] = pattern[j+1];
  63. j++;
  64. }
  65. match = rgrep_matches(line, a);
  66. }
  67. if (match1 != 0)
  68. {
  69. while (pattern[j+2] != 0)
  70. {
  71. b[j] = pattern[j+2];
  72. j++;
  73. }
  74. match1 = rgrep_matches(line, b);
  75. }
  76. if (match == 0 && match1 == 0)
  77. return 0;
  78.  
  79. }
  80. else if (pattern[i] == '\\')
  81. {
  82. char a[MAXSIZE], b[MAXSIZE];
  83. int j = 0, k = 0, n = 0;
  84. if (line[i] == pattern[i+1])
  85. {
  86. while (line[j] != 0)
  87. {
  88. a[j] = line[j+1];
  89. j++;
  90. }
  91. while (pattern[k+2] != 0)
  92. {
  93. b[k] = pattern[k+2];
  94. k++;
  95. }
  96. }
  97. n = rgrep_matches(a, b);
  98. if ( n == 0)
  99. return 0;
  100. }
  101.  
  102. }
  103.  
  104.  
  105.  
  106. return 1;
  107. }
  108.  
  109. int main(int argc, char **argv) {
  110. if (argc != 2) {
  111. fprintf(stderr, "Usage: %s <PATTERN>\n", argv[0]);
  112. return 2;
  113. }
  114.  
  115. /* we're not going to worry about long lines */
  116. char buf[MAXSIZE];
  117.  
  118. while (!feof(stdin) && !ferror(stdin)) {
  119. if (!fgets(buf, sizeof(buf), stdin)) {
  120. break;
  121. }
  122. if (rgrep_matches(buf, argv[1])) {
  123. fputs(buf, stdout);
  124. fflush(stdout);
  125. }
  126. }
  127.  
  128. if (ferror(stdin)) {
  129. perror(argv[0]);
  130. return 1;
  131. }
  132.  
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement