rregsub.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 65 行

C
65
字号
#include <stdlib.h>#include <stdio.h>#include "regexp.h"/* substitute into one string using the matches from the last regexec() */extern	voidrregsub(wchar_t *sp,	/* source string */	wchar_t *dp,	/* destination string */	int dlen,	Resub *mp,	/* subexpression elements */	int ms)		/* number of elements pointed to by mp */{	wchar_t *ssp, *ep;	int i;	ep = dp+(dlen/sizeof(wchar_t))-1;	while(*sp != '\0'){		if(*sp == '\\'){			switch(*++sp){			case '0':			case '1':			case '2':			case '3':			case '4':			case '5':			case '6':			case '7':			case '8':			case '9':				i = *sp-'0';				if(mp[i].s.rsp != 0 && mp!=0 && ms>i)					for(ssp = mp[i].s.rsp;					     ssp < mp[i].e.rep;					     ssp++)						if(dp < ep)							*dp++ = *ssp;				break;			case '\\':				if(dp < ep)					*dp++ = '\\';				break;			case '\0':				sp--;				break;			default:				if(dp < ep)					*dp++ = *sp;				break;			}		}else if(*sp == '&'){							if(mp[0].s.rsp != 0 && mp!=0 && ms>0)			if(mp[0].s.rsp != 0)				for(ssp = mp[0].s.rsp;				     ssp < mp[0].e.rep; ssp++)					if(dp < ep)						*dp++ = *ssp;		}else{			if(dp < ep)				*dp++ = *sp;		}		sp++;	}	*dp = '\0';}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?