📄 gnuregex.h
字号:
/* If any error codes are removed, changed, or added, update the * `re_error_msg' table in regex.c. */typedef enum { REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the * standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */} reg_errcode_t;/* This data structure represents a compiled pattern. Before calling * the pattern compiler, the fields `buffer', `allocated', `fastmap', * `translate', and `no_sub' can be set. After the pattern has been * compiled, the `re_nsub' field is available. All other fields are * private to the regex routines. */struct re_pattern_buffer {/* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as * `unsigned char *' because its elements are * sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long allocated; /* Number of bytes actually used in `buffer'. */ unsigned long used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses * the fastmap, if there is one, to skip over impossible * starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before * comparing them, or zero for no translation. The translation * is applied to a pattern when it is compiled and to a string * when it is matched. */ char *translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. * Well, in truth it's used only in `re_search_2', to see * whether or not we should use the fastmap, so we don't set * this absolutely perfectly; see `re_compile_fastmap' (the * `duplicate' case). */ unsigned can_be_null:1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure * for `max (RE_NREGS, re_nsub + 1)' groups. * If REGS_REALLOCATE, reallocate space if necessary. * If REGS_FIXED, use what's there. */#define REGS_UNALLOCATED 0#define REGS_REALLOCATE 1#define REGS_FIXED 2 unsigned regs_allocated:2; /* Set to zero when `regex_compile' compiles a pattern; set to one * by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate:1; /* If set, `re_match_2' does not return information about * subexpressions. */ unsigned no_sub:1; /* If set, a beginning-of-line anchor doesn't match at the * beginning of the string. */ unsigned not_bol:1; /* Similarly for an end-of-line anchor. */ unsigned not_eol:1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor:1;/* [[[end pattern_buffer]]] */};typedef struct re_pattern_buffer regex_t;/* search.c (search_buffer) in Emacs needs this one opcode value. It is * defined both in `regex.c' and here. */#define RE_EXACTN_VALUE 1/* Type for byte offsets within the string. POSIX mandates this. */typedef int regoff_t;/* This is the structure we store register match data in. See * regex.texinfo for a full description of what registers match. */struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end;};/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, * `re_match_2' returns information about at least this many registers * the first time a `regs' structure is passed. */#ifndef RE_NREGS#define RE_NREGS 30#endif/* POSIX specification for registers. Aside from the different names than * `re_registers', POSIX uses an array of structures, instead of a * structure of arrays. */typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */} regmatch_t;/* Declarations for routines. *//* To avoid duplicating every routine declaration -- once with a * prototype (if we are ANSI), and once without (if we aren't) -- we * use the following macro to declare argument types. This * unfortunately clutters up the declarations a bit, but I think it's * worth it. */#if STDC_HEADERS#define _RE_ARGS(args) args#else /* not __STDC__ */#define _RE_ARGS(args) ()#endif /* not __STDC__ *//* Sets the current default syntax to SYNTAX, and return the old syntax. * You can also simply assign to the `re_syntax_options' variable. */extern reg_syntax_t re_set_syntax _RE_ARGS((reg_syntax_t syntax));/* Compile the regular expression PATTERN, with length LENGTH * and syntax given by the global `re_syntax_options', into the buffer * BUFFER. Return NULL if successful, and an error string if not. */extern const char *re_compile_pattern _RE_ARGS((const char *pattern, int length, struct re_pattern_buffer * buffer));/* Compile a fastmap for the compiled pattern in BUFFER; used to * accelerate searches. Return 0 if successful and -2 if was an * internal error. */extern int re_compile_fastmap _RE_ARGS((struct re_pattern_buffer * buffer));/* Search in the string STRING (with length LENGTH) for the pattern * compiled into BUFFER. Start searching at position START, for RANGE * characters. Return the starting position of the match, -1 for no * match, or -2 for an internal error. Also return register * information in REGS (if REGS and BUFFER->no_sub are nonzero). */extern int re_search _RE_ARGS((struct re_pattern_buffer * buffer, const char *string, int length, int start, int range, struct re_registers * regs));/* Like `re_search', but search in the concatenation of STRING1 and * STRING2. Also, stop searching at index START + STOP. */extern int re_search_2 _RE_ARGS((struct re_pattern_buffer * buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers * regs, int stop));/* Like `re_search', but return how many characters in STRING the regexp * in BUFFER matched, starting at position START. */extern int re_match _RE_ARGS((struct re_pattern_buffer * buffer, const char *string, int length, int start, struct re_registers * regs));/* Relates to `re_match' as `re_search_2' relates to `re_search'. */extern int re_match_2 _RE_ARGS((struct re_pattern_buffer * buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers * regs, int stop));/* Set REGS to hold NUM_REGS registers, storing them in STARTS and * ENDS. Subsequent matches using BUFFER and REGS will use this memory * for recording register information. STARTS and ENDS must be * allocated with malloc, and must each be at least `NUM_REGS * sizeof * (regoff_t)' bytes long. * * If NUM_REGS == 0, then subsequent matches should allocate their own * register data. * * Unless this function is called, the first search or match using * PATTERN_BUFFER will allocate its own register data, without * freeing the old data. */extern void re_set_registers _RE_ARGS((struct re_pattern_buffer * buffer, struct re_registers * regs, unsigned num_regs, regoff_t * starts, regoff_t * ends));/* 4.2 bsd compatibility. */extern char *re_comp _RE_ARGS((const char *));extern int re_exec _RE_ARGS((const char *));/* POSIX compatibility. */extern int regcomp _RE_ARGS((regex_t * preg, const char *pattern, int cflags));extern int regexec _RE_ARGS((const regex_t * preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags));extern size_t regerror _RE_ARGS((int errcode, const regex_t * preg, char *errbuf, size_t errbuf_size));extern void regfree _RE_ARGS((regex_t * preg));#endif /* not __REGEXP_LIBRARY_H__ *//* * Local variables: * make-backup-files: t * version-control: t * trim-versions-without-asking: nil * End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -