📄 regex.h
字号:
/* If this bit is set, then ignore case when matching. If not set, then case is significant. */#define REG_ICASE (1 << 1)/* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */#define REG_NEWLINE (1 << 2)/* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */#define REG_NOSUB (1 << 3)/* POSIX `eflags' bits (i.e., information for regexec). *//* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */#define REG_NOTBOL 1/* Like REG_NOTBOL, except for the end-of-line. */#define REG_NOTEOL (1 << 1)/* Use PMATCH[0] to delimit the start and end of the search in the buffer. */#define REG_STARTEND (1 << 2)/* If any error codes are removed, changed, or added, update the `__re_error_msgid' table in regcomp.c. */typedef enum{ _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _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, /* Invalid collating element. */ _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;#ifdef _XOPEN_SOURCE# define REG_ENOSYS _REG_ENOSYS#endif#define REG_NOERROR _REG_NOERROR#define REG_NOMATCH _REG_NOMATCH#define REG_BADPAT _REG_BADPAT#define REG_ECOLLATE _REG_ECOLLATE#define REG_ECTYPE _REG_ECTYPE#define REG_EESCAPE _REG_EESCAPE#define REG_ESUBREG _REG_ESUBREG#define REG_EBRACK _REG_EBRACK#define REG_EPAREN _REG_EPAREN#define REG_EBRACE _REG_EBRACE#define REG_BADBR _REG_BADBR#define REG_ERANGE _REG_ERANGE#define REG_ESPACE _REG_ESPACE#define REG_BADRPT _REG_BADRPT#define REG_EEND _REG_EEND#define REG_ESIZE _REG_ESIZE#define REG_ERPAREN _REG_ERPAREN/* struct re_pattern_buffer normally uses member names like `buffer' that POSIX does not allow. In POSIX mode these members have names with leading `re_' (e.g., `re_buffer'). */#ifdef __USE_GNU_REGEX# define _REG_RE_NAME(id) id# define _REG_RM_NAME(id) id#else# define _REG_RE_NAME(id) re_##id# define _REG_RM_NAME(id) rm_##id#endif/* The user can specify the type of the re_translate member by defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned char *. This pollutes the POSIX name space, so in POSIX mode just use unsigned char *. */#ifdef __USE_GNU_REGEX# ifndef RE_TRANSLATE_TYPE# define RE_TRANSLATE_TYPE unsigned char *# endif# define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE#else# define REG_TRANSLATE_TYPE unsigned char *#endif/* 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{ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *_REG_RE_NAME (buffer); /* Number of bytes to which `buffer' points. */ __re_long_size_t _REG_RE_NAME (allocated); /* Number of bytes actually used in `buffer'. */ __re_long_size_t _REG_RE_NAME (used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t _REG_RE_NAME (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 *_REG_RE_NAME (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. */ REG_TRANSLATE_TYPE _REG_RE_NAME (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 int _REG_RE_NAME (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. */#ifdef __USE_GNU_REGEX# define REGS_UNALLOCATED 0# define REGS_REALLOCATE 1# define REGS_FIXED 2#endif unsigned int _REG_RE_NAME (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 int _REG_RE_NAME (fastmap_accurate) : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned int _REG_RE_NAME (no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned int _REG_RE_NAME (not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned int _REG_RE_NAME (not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned int _REG_RE_NAME (newline_anchor) : 1;/* [[[end pattern_buffer]]] */};typedef struct re_pattern_buffer regex_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{ __re_size_t _REG_RM_NAME (num_regs); regoff_t *_REG_RM_NAME (start); regoff_t *_REG_RM_NAME (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. */#if !defined RE_NREGS && defined __USE_GNU_REGEX# 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. *//* 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 (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 (const char *__pattern, size_t __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 (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 regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__string, __re_idx_t __length, __re_idx_t __start, regoff_t __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 regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, __re_idx_t __length1, const char *__string2, __re_idx_t __length2, __re_idx_t __start, regoff_t __range, struct re_registers *__regs, __re_idx_t __stop);/* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__string, __re_idx_t __length, __re_idx_t __start, struct re_registers *__regs);/* Relates to `re_match' as `re_search_2' relates to `re_search'. */extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, __re_idx_t __length1, const char *__string2, __re_idx_t __length2, __re_idx_t __start, struct re_registers *__regs, __re_idx_t __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 (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends);#if defined _REGEX_RE_COMP || defined _LIBC# ifndef _CRAY/* 4.2 bsd compatibility. */extern char *re_comp (const char *);extern int re_exec (const char *);# endif#endif/* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */#ifndef _Restrict_# if 199901L <= __STDC_VERSION__# define _Restrict_ restrict# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)# define _Restrict_ __restrict# else# define _Restrict_# endif#endif/* gcc 3.1 and up support the [restrict] syntax. Don't trust sys/cdefs.h's definition of __restrict_arr, though, as it mishandles gcc -ansi -pedantic. */#ifndef _Restrict_arr_# if ((199901L <= __STDC_VERSION__ \ || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ && !__STRICT_ANSI__)) \ && !defined __GNUG__)# define _Restrict_arr_ _Restrict_# else# define _Restrict_arr_# endif#endif/* POSIX compatibility. */extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags);extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __string, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_], int __eflags);extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size);extern void regfree (regex_t *__preg);#ifdef __cplusplus}#endif /* C++ */#endif /* regex.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -