Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <regex.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. char* input(){
  8.     int len_sen = 15;
  9.     char* string = calloc(len_sen, sizeof(char));
  10.     char c;
  11.     int i = 0;
  12.     while((c = getchar()) != '\n'){
  13.         if(i == len_sen - 3){
  14.             len_sen += 10;
  15.             string = realloc(string, len_sen);
  16.         }
  17.         string[i] = c;
  18.         if(!strcmp(string, "Fin."))
  19.             return string;
  20.         i++;
  21.     }
  22.     string[i] = '\0';
  23.     return string;
  24. }
  25.  
  26.  
  27. int main(){
  28.  
  29.     size_t maxGroups = 3;
  30.     regex_t reg_comp;
  31.     regmatch_t group_Array[maxGroups];
  32.     char* regex_str = "(\\w+)@[\\w-]+: ?~ ?\\# (.+)";
  33.     char* string = NULL;
  34.     int size = 10;
  35.     int k = 0;
  36.     char** text = calloc(size, sizeof(char*));
  37.  
  38.     if(regcomp(&reg_comp, regex_str, REG_EXTENDED)){
  39.         printf("Ошибка компиляции регулярного выражения\n");
  40.         return 0;
  41.     }
  42.     if(regcomp(&reg_comp, regex_str, REG_EXTENDED) == REG_NOMATCH)
  43.         printf("Cтрока не совпадает с регулярным выражением");
  44.  
  45.     while(1){
  46.  
  47.         string = input();
  48.         if(strcmp(string, "Fin.") == 0){
  49.             break;
  50.         }
  51.  
  52.         if(k + 1 == size){
  53.             size += 10;
  54.             text = realloc(text, size*sizeof(char*));
  55.         }
  56.         text[k] = string;
  57.         k++;
  58.     }
  59.  
  60.     for(int i = 0; i < k; i++){
  61.         if(regexec(&reg_comp, text[i], maxGroups, group_Array, 0) == 0){
  62.             char* str = text[i];
  63.             for(int j = group_Array[3].rm_so; j < group_Array[3].rm_eo; j++)
  64.                 printf("%c", str[j]);
  65.  
  66.             printf(" - ");
  67.  
  68.             for(int j = group_Array[6].rm_so; j < group_Array[6].rm_eo; j++)
  69.                 printf("%c", str[j]);
  70.  
  71.             printf("\n");
  72.         }
  73.     }
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement