regexec [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
regexec
Compare string against compiled regular expression.
Sytnax
#include <sys/types.h>
#include <regex.h>
int regexec(const regex_t *reg, const char *string,
size_t maxmatch, regmatch_t submatch[] ,
int flags);
Parameters
reg Must point to an object where regcomp() stored a compiled
regular expression.
string Is the string you want to compare against the regular
expression associated with reg.
maxmatch Is the maximum number of matching substrings that you want
regexec() to find. This should be less than or equal to the
number of elements that can be stored in the submatch array.
submatch[] Points to an array with a length of at least maxmatch where
regexec()strings of string which match the regular expression
reg.
flags Holds flags that affect the behavior of regexec(). Flag
values are represented by symbolic constants defined in
<regex.h>. To get an appropriate flags value, OR the desired
symbols together. Possible symbols are:
REG_NOTBOL Tells regexec() not to treat the beginning of
string as the beginning of the text line.
This means that the special meaning of the
caret (^) (the beginning of the line) never
matches in string.
REG_NOTEO Tell regexec() not to treat the end of string
as the end of the text line. This means that
the special meaning of the dollar sign ($)
(the end of the line) never matches in
string.
Return Values
regexec() returns zero to indicate a successful match, or one of the
following error codes.
Description
regexec() compares the given string to the regular expression reg. reg
must have been created by a previous call to regcomp(). The regcomp()
flags that were specified at the time the regular expression was compiled
affect the results of as specified in the flags to regcomp() or maxmatch
is zero, regexec() simply checks whether or not the given string contains
a match for reg. If so, regexec() returns zero. If there is no match,
regexec() returns the value of REG_NOMATCH, defined in <regex.h>. When
REG_NOSUB is in effect, maxmatch should be zero.
If REG_NOSUB was not specified, regexec() uses the array submatch to
record substrings matching the regular expression. The elements of this
array have the structure type regmatch_t, defined in <regex.h>. This
structure contains at least the following:
char points to the first character of a matching substring.
*rm_sp;
char points to the character immediately following the end of a
*rm_ep; matching substring.
off_t offset from string to the first character of a matching
rm_so; substring.
off_t offset from string to the character immediately following the
rm_eo; end of a matching substring.
submatch[0] contains the first substring of string that matches the
entire regular expression reg. If reg contains parenthesized
subexpressions, submatch[i] contains the substring matching the ith
parenthesized subexpression. For example, if you have a Basic regular
expression
a\(b*\)c\(d*\)
submatch[0] contains the match for the whole regular expression,
submatch[1] contains the match for \(b*\), and submatch[2] contains the
match for \(d*\). Unused elements of submatch have NULL pointers and -1
offsets. If there are more than maxmatch matching substrings, regexec()
finds them but only records maxmatch in submatch.
A parenthesized subexpression of pattern might be part of several
different substring matches, or match nothing even though the expression
as a whole matches. In this case, regexec() follows these rules:
1. If subexpression i participated in the match several times,
submatch[i] refers to the last such match.
2. If subexpression i did not participate in a successful match, the
pointers in submatch[i] are NULL and the byte offsets in
submatch[i] are set to -1. This can happen, for example, if the
regular expression has the form A|B; if string matches the A part
and subexpression i appears in the B part, there is no match for
subexpression i.
3. If subexpression i is contained within another subexpression j, no
other subexpression within j contains i, and submatch[j] reports a
match of subexpression j, then submatch[i] reports the match or
nonmatch of subexpression i as described in rules 1 and 2, but
within the substring reported in submatch[j] rather than the whole
string.
4. If subexpression i is contained in subexpression j, and the
pointers in submatch[j] are NULL, the pointers in submatch[i] are
also NULL and the byte offsets in submatch[i] are set to -1.
5. If subexpression i matches a zero-length string, both pointers and
both byte offsets in submatch[i] indicate the character after the
zero-length string.
Errors
If an error occurs, errno is set to one of the following values:
REG_ESPACE CAUSE There were not enough free system for regexec() to
carry out the comparison.
ACTION Free up more resources, or specify a less complex
regular expression or shorter string.
REG_NOMATCH CAUSE No match was found.
ACTION No action is required.
REG_EFATAL CAUSE Some other error occurred. For example, reg was not
a valid compiled regular expression, or was destroyed
by an errant pointer.
ACTION Check your program carefully.
See Also
grep(1), regcomp(), regfree(), regexp(3)
MPE/iX 5.0 Documentation