In GNU, you can both match and search for a given regular expression. To do either, you must first compile it in a pattern buffer (see GNU Pattern Buffers).
Regular expressions match according to the syntax with which they were
compiled; with GNU, you indicate what syntax you want by setting
re_syntax_options (declared in regex.h)
before calling the compiling function,
below). See Syntax Bits, and Predefined Syntaxes.
You can change the value of
re_syntax_options at any time.
Usually, however, you set its value once and then never change it.
re_compile_pattern takes a pattern buffer as an argument. You
must initialize the following fields:
Initialize this to point to a translate table if you want one, or to zero if you don’t. We explain translate tables in GNU Translate Tables.
Initialize this to nonzero if you want a fastmap, or to zero if you don’t.
If you want
re_compile_pattern to allocate memory for the
compiled pattern, set both of these to zero. If you have an existing
block of memory (allocated with
malloc) you want Regex to use,
buffer to its address and
allocated to its size (in
realloc to extend the space for
the compiled pattern as necessary.
To compile a pattern buffer, use:
char * re_compile_pattern (const char *regex, const int regex_size, struct re_pattern_buffer *pattern_buffer)
regex is the regular expression’s address, regex_size is its length, and pattern_buffer is the pattern buffer’s address.
re_compile_pattern successfully compiles the regular
expression, it returns zero and sets
*pattern_buffer to the
compiled pattern. It sets the pattern buffer’s fields as follows:
to the compiled pattern.
to the current value of
to the number of subexpressions in regex.
re_compile_pattern can’t compile regex, it returns an
error string corresponding to a POSIX error code.