歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> LinuxC支持正則表達式的字符串替換函數(四)

LinuxC支持正則表達式的字符串替換函數(四)

日期:2017/2/25 10:38:16   编辑:Linux教程

  //用於malloc的臨時內存區

  char *tmp;

  char *new_tmp_str=dest;

  int new_tmp_str_len=0; //new_tmp_str相對於dest地址開始處的長度

  //開始循環替換src串中符合pattern的子串為newstr

  while(!rtn)

  {

  reg_rtn_struct_var=cns_reg(new_tmp_str, pattern);

  rtn = reg_rtn_struct_var.rtn;

  pstart = reg_rtn_struct_var.pstart;

  pend = reg_rtn_struct_var.pend;

  if(!rtn)

  {

  //分配新的空間: strlen(newstr):新串長 pend-pstart:舊串長

  tmp=(char*)calloc(sizeof(char), strlen(dest)+strlen(newsubstr)-(pend-pstart)+1 );

  //把src內的前new_tmp_str_len+pstart個內存空間的數據,拷貝到arr

  strncpy(tmp, dest, new_tmp_str_len+pstart);

  //標識串結束

  tmp[new_tmp_str_len+pstart]='\0';

  //連接arr和newstr, 即把newstr附在arr尾部, 從而組成新串(或說字符數組)arr

  strcat(tmp, newsubstr);

  //把src中 從oldstr子串位置後的部分和arr連接在一起,組成新串arr

  strcat(tmp, new_tmp_str+pend);

  //把用malloc分配的內存,復制給指針dest

  dest = strdup(tmp);

  //釋放malloc分配的內存空間

  free(tmp);

  new_tmp_str_len = new_tmp_str_len + pstart + strlen(newsubstr);

  new_tmp_str=dest+new_tmp_str_len;

  }

  }

  return dest;

  }

  int main()

  {

  //測試正則表達式

  char str[]="1love2love3love4love5love6love!";

  reg_rtn_struct reg_rtn_struct_var;

  char *newstr=cns_str_ereplace(str,".?.?ve","..");

  puts(newstr);

  //return 0;

  }

Copyright © Linux教程網 All Rights Reserved