rregsub.c

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

C
65
字号
#include <u.h>#include <libc.h>#include "regexp.h"/* substitute into one string using the matches from the last regexec() */extern	voidrregsub(Rune *sp,	/* source string */	Rune *dp,	/* destination string */	int dlen,	Resub *mp,	/* subexpression elements */	int ms)		/* number of elements pointed to by mp */{	Rune *ssp, *ep;	int i;	ep = dp+(dlen/sizeof(Rune))-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].rsp != 0 && mp!=0 && ms>i)					for(ssp = mp[i].rsp;					     ssp < mp[i].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].rsp != 0 && mp!=0 && ms>0)			if(mp[0].rsp != 0)				for(ssp = mp[0].rsp;				     ssp < mp[0].rep; ssp++)					if(dp < ep)						*dp++ = *ssp;		}else{			if(dp < ep)				*dp++ = *sp;		}		sp++;	}	*dp = '\0';}

⌨️ 快捷键说明

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