⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pattern.c

📁 操作系统源代码
💻 C
字号:
/* Copyright (c) 1985 Ceriel J.H. Jacobs */# ifndef lintstatic char rcsid[] = "$Header: pattern.c,v 7.2 88/04/29 11:46:44 ceriel Exp $";# endif not lint# define _PATTERN_# include "in_all.h"# include "pattern.h"# include "getline.h"# if V8_REGEX# include <regexp.h># endif V8_REGEX/* * Interface to regular expression routines. * Also: simple minded patterns without meta-characters. */# if USG_REGEXstatic char *pattern;		/* Pointer to compiled pattern */char *regcmp(), *regex();# endif USG_REGEX# if V8_REGEXstatic struct regexp *pattern;static char *rc_error;struct regexp *regcomp();# endif V8_REGEX# if USG_REGEX || V8_REGEX/* * Compile a new pattern, but first free previous result. */char *re_comp(s) char *s; {	if (!*s) {		/*		 * user wants previous pattern		 */		return (char *) 0;	}	if (pattern) {		/*		 * there was a compiled pattern		 */		free(pattern);		pattern = 0;	}# if USG_REGEX	return (pattern = regcmp(s, (char *) 0)) ?		(char *) 0 :		"Error in pattern";# endif USG_REGEX# if V8_REGEX	pattern = regcomp(s);	if (pattern) return (char *) 0;	if (rc_error) return rc_error;	return "Error in pattern";# endif V8_REGEX}# if V8_REGEXVOIDregerror(str) char *str; {	rc_error = str;}# endif V8_REGEX/* * Search for compiled pattern in string "s". Return 0 if not found. */re_exec(s) char *s; {# if USG_REGEX	return !(regex(pattern,s) == 0);# endif USG_REGEX# if V8_REGEX#  if _MINIX	return regexec(pattern,s,1);#  else	return regexec(pattern,s);#  endif# endif V8_REGEX}# else# ifndef BSD_REGEX/* * In this case, simple minded pattern search without meta-characters */char	*strcpy();static char *pattern;/* * re_comp : Just remember pattern. */char *re_comp(s) char *s; {	if (!*s) {		/*		 * User wants previous pattern		 */		if (!pattern) {			return "No previous regular expression";		}		return (char *) 0;	}	if (pattern) {		/*		 * Free old pattern		 */		free(pattern);	}	pattern = alloc((unsigned) (strlen(s) + 1), 0);	(VOID) strcpy(pattern,s);	return (char *) 0;}/* * re-exec : Simple minded pattern matcher */re_exec(s) register char *s; {	register char *ppat, *pstr;	for (; *s; s++) {		/*		 * As long as there are characters ...		 */		ppat = pattern; /* Try the pattern again */		pstr = s;		while (*ppat == *pstr) {			if (*++ppat == '\0') {				/*				 * The pattern matched! Report success				 */				return 1;			}			if (*++pstr == '\0') {				/*				 * Not enough characters left in the string.				 * Report failure				 */				return 0;			}		}	}	return 0;		/* Failure */}# endif not BSD_REGEX# endif

⌨️ 快捷键说明

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