亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? regex.c

?? <B>Digital的Unix操作系統(tǒng)VAX 4.2源碼</B>
?? C
字號:
/* @(#)regex.c	4.1 (Berkeley) 12/21/80 */#/* * routines to do regular expression matching * * Entry points: * *	re_comp(s) *		char *s; *	 ... returns 0 if the string s was compiled successfully, *		     a pointer to an error message otherwise. *	     If passed 0 or a null string returns without changing *           the currently compiled re (see note 11 below). * *	re_exec(s) *		char *s; *	 ... returns 1 if the string s matches the last compiled regular *		       expression,  *		     0 if the string s failed to match the last compiled *		       regular expression, and *		    -1 if the compiled regular expression was invalid  *		       (indicating an internal error). * * The strings passed to both re_comp and re_exec may have trailing or * embedded newline characters; they are terminated by nulls. * * The identity of the author of these routines is lost in antiquity; * this is essentially the same as the re code in the original V6 ed. * * The regular expressions recognized are described below. This description * is essentially the same as that for ed. * *	A regular expression specifies a set of strings of characters. *	A member of this set of strings is said to be matched by *	the regular expression.  In the following specification for *	regular expressions the word `character' means any character but NUL. * *	1.  Any character except a special character matches itself. *	    Special characters are the regular expression delimiter plus *	    \ [ . and sometimes ^ * $. *	2.  A . matches any character. *	3.  A \ followed by any character except a digit or ( ) *	    matches that character. *	4.  A nonempty string s bracketed [s] (or [^s]) matches any *	    character in (or not in) s. In s, \ has no special meaning, *	    and ] may only appear as the first letter. A substring  *	    a-b, with a and b in ascending ASCII order, stands for *	    the inclusive range of ASCII characters. *	5.  A regular expression of form 1-4 followed by * matches a *	    sequence of 0 or more matches of the regular expression. *	6.  A regular expression, x, of form 1-8, bracketed \(x\) *	    matches what x matches. *	7.  A \ followed by a digit n matches a copy of the string that the *	    bracketed regular expression beginning with the nth \( matched. *	8.  A regular expression of form 1-8, x, followed by a regular *	    expression of form 1-7, y matches a match for x followed by *	    a match for y, with the x match being as long as possible *	    while still permitting a y match. *	9.  A regular expression of form 1-8 preceded by ^ (or followed *	    by $), is constrained to matches that begin at the left *	    (or end at the right) end of a line. *	10. A regular expression of form 1-9 picks out the longest among *	    the leftmost matches in a line. *	11. An empty regular expression stands for a copy of the last *	    regular expression encountered. *//* * constants for re's */#define	CBRA	1#define	CCHR	2#define	CDOT	4#define	CCL	6#define	NCCL	8#define	CDOL	10#define	CEOF	11#define	CKET	12#define	CBACK	18#define	CSTAR	01#define	ESIZE	512#define	NBRA	9static	char	expbuf[ESIZE], *braslist[NBRA], *braelist[NBRA];static	char	circf;/* * compile the regular expression argument into a dfa */char *re_comp(sp)	register char	*sp;{	register int	c;	register char	*ep = expbuf;	int	cclcnt, numbra = 0;	char	*lastep = 0;	char	bracket[NBRA];	char	*bracketp = &bracket[0];	static	char	*retoolong = "Regular expression too long";#define	comerr(msg) {expbuf[0] = 0; numbra = 0; return(msg); }	if (sp == 0 || *sp == '\0') {		if (*ep == 0)			return("No previous regular expression");		return(0);	}	if (*sp == '^') {		circf = 1;		sp++;	}	else		circf = 0;	for (;;) {		if (ep >= &expbuf[ESIZE])			comerr(retoolong);		if ((c = *sp++) == '\0') {			if (bracketp != bracket)				comerr("unmatched \\(");			*ep++ = CEOF;			*ep++ = 0;			return(0);		}		if (c != '*')			lastep = ep;		switch (c) {		case '.':			*ep++ = CDOT;			continue;		case '*':			if (lastep == 0 || *lastep == CBRA || *lastep == CKET)				goto defchar;			*lastep |= CSTAR;			continue;		case '$':			if (*sp != '\0')				goto defchar;			*ep++ = CDOL;			continue;		case '[':			*ep++ = CCL;			*ep++ = 0;			cclcnt = 1;			if ((c = *sp++) == '^') {				c = *sp++;				ep[-2] = NCCL;			}			do {				if (c == '\0')					comerr("missing ]");				if (c == '-' && ep [-1] != 0) {					if ((c = *sp++) == ']') {						*ep++ = '-';						cclcnt++;						break;					}					while (ep[-1] < c) {						*ep = ep[-1] + 1;						ep++;						cclcnt++;						if (ep >= &expbuf[ESIZE])							comerr(retoolong);					}				}				*ep++ = c;				cclcnt++;				if (ep >= &expbuf[ESIZE])					comerr(retoolong);			} while ((c = *sp++) != ']');			lastep[1] = cclcnt;			continue;		case '\\':			if ((c = *sp++) == '(') {				if (numbra >= NBRA)					comerr("too many \\(\\) pairs");				*bracketp++ = numbra;				*ep++ = CBRA;				*ep++ = numbra++;				continue;			}			if (c == ')') {				if (bracketp <= bracket)					comerr("unmatched \\)");				*ep++ = CKET;				*ep++ = *--bracketp;				continue;			}			if (c >= '1' && c < ('1' + NBRA)) {				*ep++ = CBACK;				*ep++ = c - '1';				continue;			}			*ep++ = CCHR;			*ep++ = c;			continue;		defchar:		default:			*ep++ = CCHR;			*ep++ = c;		}	}}/*  * match the argument string against the compiled re */intre_exec(p1)	register char	*p1;{	register char	*p2 = expbuf;	register int	c;	int	rv;	for (c = 0; c < NBRA; c++) {		braslist[c] = 0;		braelist[c] = 0;	}	if (circf)		return((advance(p1, p2)));	/*	 * fast check for first character	 */	if (*p2 == CCHR) {		c = p2[1];		do {			if (*p1 != c)				continue;			if (rv = advance(p1, p2))				return(rv);		} while (*p1++);		return(0);	}	/*	 * regular algorithm	 */	do		if (rv = advance(p1, p2))			return(rv);	while (*p1++);	return(0);}/*  * try to match the next thing in the dfa */static	intadvance(lp, ep)	register char	*lp, *ep;{	register char	*curlp;	int	ct, i;	int	rv;	for (;;)		switch (*ep++) {		case CCHR:			if (*ep++ == *lp++)				continue;			return(0);		case CDOT:			if (*lp++)				continue;			return(0);		case CDOL:			if (*lp == '\0')				continue;			return(0);		case CEOF:			return(1);		case CCL:			if (cclass(ep, *lp++, 1)) {				ep += *ep;				continue;			}			return(0);		case NCCL:			if (cclass(ep, *lp++, 0)) {				ep += *ep;				continue;			}			return(0);		case CBRA:			braslist[*ep++] = lp;			continue;		case CKET:			braelist[*ep++] = lp;			continue;		case CBACK:			if (braelist[i = *ep++] == 0)				return(-1);			if (backref(i, lp)) {				lp += braelist[i] - braslist[i];				continue;			}			return(0);		case CBACK|CSTAR:			if (braelist[i = *ep++] == 0)				return(-1);			curlp = lp;			ct = braelist[i] - braslist[i];			while (backref(i, lp))				lp += ct;			while (lp >= curlp) {				if (rv = advance(lp, ep))					return(rv);				lp -= ct;			}			continue;		case CDOT|CSTAR:			curlp = lp;			while (*lp++)				;			goto star;		case CCHR|CSTAR:			curlp = lp;			while (*lp++ == *ep)				;			ep++;			goto star;		case CCL|CSTAR:		case NCCL|CSTAR:			curlp = lp;			while (cclass(ep, *lp++, ep[-1] == (CCL|CSTAR)))				;			ep += *ep;			goto star;		star:			do {				lp--;				if (rv = advance(lp, ep))					return(rv);			} while (lp > curlp);			return(0);		default:			return(-1);		}}backref(i, lp)	register int	i;	register char	*lp;{	register char	*bp;	bp = braslist[i];	while (*bp++ == *lp++)		if (bp >= braelist[i])			return(1);	return(0);}intcclass(set, c, af)	register char	*set, c;	int	af;{	register int	n;	if (c == 0)		return(0);	n = *set++;	while (--n)		if (*set++ == c)			return(af);	return(! af);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品自拍偷拍| 91丨porny丨首页| 91精品国产品国语在线不卡| 午夜私人影院久久久久| 欧美精品久久一区二区三区| 麻豆视频观看网址久久| 精品国产乱码久久久久久老虎 | 日韩欧美中文字幕精品| 久久超碰97人人做人人爱| 国产日韩欧美综合在线| 粉嫩蜜臀av国产精品网站| 亚洲欧美偷拍三级| 在线精品亚洲一区二区不卡| 日日摸夜夜添夜夜添国产精品| 日韩视频国产视频| 国产成人av电影在线| 一级精品视频在线观看宜春院| 精品视频色一区| 国产在线播放一区三区四| 日韩一区中文字幕| 欧美一区二区视频网站| 国产精品911| 亚洲第四色夜色| 久久精子c满五个校花| 91色|porny| 久久成人免费电影| 一区二区三区国产精华| 日韩三级视频在线看| 99riav一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 国产农村妇女精品| 欧美日韩免费不卡视频一区二区三区 | 不卡在线视频中文字幕| 亚洲一区二区欧美日韩 | 99视频热这里只有精品免费| 五月综合激情婷婷六月色窝| 中文字幕免费一区| 欧美一区二区三区四区高清| 不卡一区二区中文字幕| 久久成人18免费观看| 亚洲激情在线激情| 欧美韩日一区二区三区四区| 欧美精品一二三区| 91免费观看在线| 久久99久久精品| 午夜精品在线视频一区| 国产精品乱人伦| 精品国产乱码久久久久久1区2区 | 欧美一级片免费看| 91亚洲精华国产精华精华液| 国产一区 二区| 日本亚洲最大的色成网站www| 日韩一区欧美一区| 久久精品人人做人人爽人人| 欧美一区二区在线不卡| 在线免费观看日本一区| av男人天堂一区| 成人免费高清在线观看| 精品一区二区三区免费| 免费久久精品视频| 视频一区视频二区中文| 亚洲国产精品一区二区尤物区| 国产精品欧美极品| 国产午夜亚洲精品午夜鲁丝片| 日韩欧美国产综合| 欧美理论片在线| 欧美日韩午夜在线| 色琪琪一区二区三区亚洲区| 成人av在线影院| 国产suv精品一区二区三区| 国产一区二区免费视频| 久久福利视频一区二区| 久久国产视频网| 免费精品视频在线| 精品一区二区三区不卡| 久久爱另类一区二区小说| 男女男精品视频网| 捆绑调教美女网站视频一区| 麻豆精品久久久| 国产一区二区三区观看| 国产精品99久| 不卡av在线免费观看| 99久久精品一区二区| 日本丶国产丶欧美色综合| 一本大道久久a久久精品综合| 色综合天天天天做夜夜夜夜做| 99久久久精品| 欧美日韩午夜在线| 欧美一级高清片| 久久九九国产精品| 国产精品亲子伦对白| 一区二区成人在线观看| 午夜天堂影视香蕉久久| 久久国产生活片100| 国产河南妇女毛片精品久久久| 成人免费高清视频在线观看| 91香蕉视频污| 欧美日韩电影在线播放| 精品人伦一区二区色婷婷| 亚洲国产精品精华液ab| 一区二区三区四区乱视频| 亚洲伊人伊色伊影伊综合网| 三级在线观看一区二区| 国产精品18久久久久久久久久久久| 粉嫩嫩av羞羞动漫久久久 | 国产精品123| 色综合久久综合网欧美综合网 | 奇米一区二区三区| 成人av影院在线| 欧美日韩在线播放三区四区| 日韩免费观看2025年上映的电影| 久久亚洲二区三区| 一区二区三区在线播放| 久久精品国产一区二区| 成人午夜激情片| 欧美日韩高清不卡| 国产精品色在线| 日韩主播视频在线| 成人蜜臀av电影| 欧美老肥妇做.爰bbww视频| 久久午夜羞羞影院免费观看| 亚洲免费av高清| 精品一区二区三区视频| 在线免费视频一区二区| 久久久www免费人成精品| 亚洲国产精品欧美一二99| 激情欧美一区二区| 91国模大尺度私拍在线视频| 精品88久久久久88久久久| 亚洲人成电影网站色mp4| 精品一二线国产| 欧美在线观看禁18| 国产精品久久影院| 久久成人羞羞网站| 欧美日韩一区二区电影| 亚洲欧美影音先锋| 国产精品亚洲成人| 日韩免费视频一区| 亚洲成人久久影院| 91麻豆蜜桃一区二区三区| 精品国产乱码久久| 日本免费在线视频不卡一不卡二| 色婷婷精品久久二区二区蜜臂av | 日韩理论电影院| 久久99精品国产.久久久久久| 欧美专区在线观看一区| 亚洲特级片在线| 国产精品主播直播| 精品国产一区二区三区不卡| 天使萌一区二区三区免费观看| 91视频一区二区三区| 国产日韩亚洲欧美综合| 精品亚洲国产成人av制服丝袜| 在线播放亚洲一区| 午夜影院久久久| 色美美综合视频| 亚洲天堂av一区| 99国产精品久久久久久久久久| 国产欧美日韩中文久久| 国产成人综合在线观看| 精品国产乱码久久久久久免费| 理论电影国产精品| 欧美一区二区三区在| 日韩—二三区免费观看av| 欧美人与z0zoxxxx视频| 日韩专区一卡二卡| 欧美一区二区三区影视| 久久国产视频网| 精品国产免费人成电影在线观看四季| 日韩精品乱码av一区二区| 欧美日韩和欧美的一区二区| 亚洲午夜精品一区二区三区他趣| 在线亚洲免费视频| 五月天欧美精品| 欧美一级国产精品| 国产一区二区三区综合| 日本一区二区免费在线观看视频| 国产乱码一区二区三区| 久久精品欧美日韩| 成人av网站在线观看免费| 中文字幕日本不卡| 91成人免费电影| 三级精品在线观看| 精品捆绑美女sm三区| 成人永久免费视频| 一区二区免费视频| 欧美丰满一区二区免费视频| 麻豆91在线播放免费| 国产亚洲精品bt天堂精选| 粉嫩av一区二区三区粉嫩| √…a在线天堂一区| 欧美日韩中文字幕一区二区| 日本不卡一二三| 欧美国产视频在线| 在线观看中文字幕不卡| 久久99精品一区二区三区三区| 国产欧美日韩亚州综合| 欧美在线观看视频一区二区三区 | 欧美激情在线看| 欧美日韩免费电影|