da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fp 5 CW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de Af
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de aF
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ie \\$3 .ft \\$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.el \{\
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ds ;G \&
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nr ;G \\n(.f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\\*(;G
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft \\n(;G \}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de L
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de LR
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de RL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EX \" start example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 1i 2i 3i 4i 5i 6i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.RS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft 5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EE \" end example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.RE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TH RE 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH NAME
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinrecomp, reexec, ressub, refree, reerror \(mi regular expression library
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH SYNOPSIS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.EX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <re.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinRe_program_t* recomp(char* \fIpattern\fP, int \fIflags\fP);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint reexec(Re_program_t* \fIre\fP, char* \fIsource\fP);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvoid ressub(Re_program_t* \fIre\fP, Sfio_t* \fIsp\fP, char* \fIold\fP, char* \fInew\fP, int \fIflags\fP);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvoid reerror(char* \fImessage\fP);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvoid refree(Re_program_t* \fIre\fP);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.EE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH DESCRIPTION
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L recomp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincompiles a regular expression in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I pattern
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand returns a pointer to the compiled regular expression.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe space is allocated by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR malloc (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand may be released by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR refree .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinRegular expressions are as in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR egrep (1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexcept that newlines are treated as ordinary
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincharacters and
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L $
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmatches the end of a null-terminated string.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I flags
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmay be
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L RE_EDSTYLE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhich specifies
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR ed (1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstyle special characters,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR \e( ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR \e) ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR \e? ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L \e+
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L \e|
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR egrep (1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR ( ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR ) ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR ? ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L +
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR | ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinrespectively.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmatches the null-terminated
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I source
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstring against the compiled regular expression
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfrom a previous call to
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR recomp .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf it matches,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns a non-zero value.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I flags
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L RE_MATCH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen the array
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis filled with character pointers to the substrings of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I source
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthat correspond to the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinparenthesized subexpressions of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR pattern :
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match[i].sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpoints to the beginning and
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match[i].ep
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpoints just beyond
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthe end of substring
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR i .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(Subexpression
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinbegins at the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR i th
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmatched left parenthesis, counting from 1.)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPointers in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match[0]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpick out the substring that corresponds to
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthe entire regular expression.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinUnused elements of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinare filled with zeros.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinMatches involving
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR * ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR + ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L ?
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinare extended as far as possible.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinA maximum of 9 subexpressions will be matched.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe structure of elements of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 8n
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* sp;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* ep;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } rematch;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L ressub
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinplaces in the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR sfio (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstream
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968china substitution instance of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I old
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinto
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I new
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I source
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin the context of the last
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinperformed on
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR re\->match .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEach instance of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LI \e n ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhere
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I n
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a digit, is replaced by the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstring delimited by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LI re\->match[ n ].sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LI re\->match[ n ].ep .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEach instance of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L &
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis replaced by the string delimited by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I re\->match[0].sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR re\->match[0].ep .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L RE_ALL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis set in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I flags
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen all occurrences of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I old
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinare replaced by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR new .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L RE_LOWER
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.RL [ RE_UPPER ]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis set in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I flags
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I old
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis converted to lower [upper] case.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reerror,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincalled whenever an error is detected in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L recomp,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reexec,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinor
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L ressub,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwrites the string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I msg
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinon the standard error file and exits.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reerror
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmay be replaced to perform
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinspecial error processing.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH DIAGNOSTICS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L recomp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns 0 for an invalid expression or other failure.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L reexec
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns 1 if
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I source
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis accepted, 0 otherwise.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH "SEE ALSO"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chined(1), grep(1), expr(1)