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