1 #include <stdlib.h> 2 #include <stdio.h> 3 #include "regexp.h" 4 5 /* substitute into one string using the matches from the last regexec() */ 6 extern void 7 rregsub(wchar_t *sp, /* source string */ 8 wchar_t *dp, /* destination string */ 9 Resub *mp, /* subexpression elements */ 10 int ms) /* number of elements pointed to by mp */ 11 { 12 wchar_t *ssp; 13 int i; 14 15 while(*sp != '\0'){ 16 if(*sp == '\\'){ 17 switch(*++sp){ 18 case '0': 19 case '1': 20 case '2': 21 case '3': 22 case '4': 23 case '5': 24 case '6': 25 case '7': 26 case '8': 27 case '9': 28 i = *sp-'0'; 29 if(mp[i].s.rsp != 0 && mp!=0 && ms>i) 30 for(ssp = mp[i].s.rsp; 31 ssp < mp[i].e.rep; 32 ssp++) 33 *dp++ = *ssp; 34 break; 35 case '\\': 36 *dp++ = '\\'; 37 break; 38 case '\0': 39 sp--; 40 break; 41 default: 42 *dp++ = *sp; 43 break; 44 } 45 }else if(*sp == '&'){ 46 if(mp[0].s.rsp != 0 && mp!=0 && ms>0) 47 if(mp[0].s.rsp != 0) 48 for(ssp = mp[0].s.rsp; 49 ssp < mp[0].e.rep; ssp++) 50 *dp++ = *ssp; 51 }else 52 *dp++ = *sp; 53 sp++; 54 } 55 *dp = '\0'; 56 } 57