Blame


1 78e51a8c 2005-01-14 devnull .TH REGEXP9 3
2 78e51a8c 2005-01-14 devnull .SH NAME
3 78e51a8c 2005-01-14 devnull regcomp, regcomplit, regcompnl, regexec, regsub, rregexec, rregsub, regerror \- regular expression
4 78e51a8c 2005-01-14 devnull .SH SYNOPSIS
5 78e51a8c 2005-01-14 devnull .B #include <utf.h>
6 78e51a8c 2005-01-14 devnull .br
7 78e51a8c 2005-01-14 devnull .B #include <fmt.h>
8 78e51a8c 2005-01-14 devnull .br
9 78e51a8c 2005-01-14 devnull .B #include <regexp9.h>
10 78e51a8c 2005-01-14 devnull .PP
11 78e51a8c 2005-01-14 devnull .ta \w'\fLRegprog 'u
12 78e51a8c 2005-01-14 devnull .B
13 78e51a8c 2005-01-14 devnull Reprog *regcomp(char *exp)
14 78e51a8c 2005-01-14 devnull .PP
15 78e51a8c 2005-01-14 devnull .B
16 78e51a8c 2005-01-14 devnull Reprog *regcomplit(char *exp)
17 78e51a8c 2005-01-14 devnull .PP
18 78e51a8c 2005-01-14 devnull .B
19 78e51a8c 2005-01-14 devnull Reprog *regcompnl(char *exp)
20 78e51a8c 2005-01-14 devnull .PP
21 78e51a8c 2005-01-14 devnull .nf
22 78e51a8c 2005-01-14 devnull .B
23 78e51a8c 2005-01-14 devnull int regexec(Reprog *prog, char *string, Resub *match, int msize)
24 78e51a8c 2005-01-14 devnull .PP
25 78e51a8c 2005-01-14 devnull .nf
26 78e51a8c 2005-01-14 devnull .B
27 78e51a8c 2005-01-14 devnull void regsub(char *source, char *dest, int dlen, Resub *match, int msize)
28 78e51a8c 2005-01-14 devnull .PP
29 78e51a8c 2005-01-14 devnull .nf
30 78e51a8c 2005-01-14 devnull .B
31 78e51a8c 2005-01-14 devnull int rregexec(Reprog *prog, Rune *string, Resub *match, int msize)
32 78e51a8c 2005-01-14 devnull .PP
33 78e51a8c 2005-01-14 devnull .nf
34 78e51a8c 2005-01-14 devnull .B
35 78e51a8c 2005-01-14 devnull void rregsub(Rune *source, Rune *dest, int dlen, Resub *match, int msize)
36 78e51a8c 2005-01-14 devnull .PP
37 78e51a8c 2005-01-14 devnull .B
38 78e51a8c 2005-01-14 devnull void regerror(char *msg)
39 78e51a8c 2005-01-14 devnull .SH DESCRIPTION
40 78e51a8c 2005-01-14 devnull .I Regcomp
41 78e51a8c 2005-01-14 devnull compiles a
42 78e51a8c 2005-01-14 devnull regular expression and returns
43 78e51a8c 2005-01-14 devnull a pointer to the generated description.
44 78e51a8c 2005-01-14 devnull The space is allocated by
45 78e51a8c 2005-01-14 devnull .IR malloc (3)
46 78e51a8c 2005-01-14 devnull and may be released by
47 78e51a8c 2005-01-14 devnull .IR free .
48 78e51a8c 2005-01-14 devnull Regular expressions are exactly as in
49 78e51a8c 2005-01-14 devnull .IR regexp9 (7).
50 78e51a8c 2005-01-14 devnull .PP
51 78e51a8c 2005-01-14 devnull .I Regcomplit
52 78e51a8c 2005-01-14 devnull is like
53 78e51a8c 2005-01-14 devnull .I regcomp
54 78e51a8c 2005-01-14 devnull except that all characters are treated literally.
55 78e51a8c 2005-01-14 devnull .I Regcompnl
56 78e51a8c 2005-01-14 devnull is like
57 78e51a8c 2005-01-14 devnull .I regcomp
58 78e51a8c 2005-01-14 devnull except that the
59 78e51a8c 2005-01-14 devnull .B .
60 78e51a8c 2005-01-14 devnull metacharacter matches all characters, including newlines.
61 78e51a8c 2005-01-14 devnull .PP
62 78e51a8c 2005-01-14 devnull .I Regexec
63 78e51a8c 2005-01-14 devnull matches a null-terminated
64 78e51a8c 2005-01-14 devnull .I string
65 78e51a8c 2005-01-14 devnull against the compiled regular expression in
66 78e51a8c 2005-01-14 devnull .IR prog .
67 78e51a8c 2005-01-14 devnull If it matches,
68 78e51a8c 2005-01-14 devnull .I regexec
69 78e51a8c 2005-01-14 devnull returns
70 78e51a8c 2005-01-14 devnull .B 1
71 78e51a8c 2005-01-14 devnull and fills in the array
72 78e51a8c 2005-01-14 devnull .I match
73 78e51a8c 2005-01-14 devnull with character pointers to the substrings of
74 78e51a8c 2005-01-14 devnull .I string
75 78e51a8c 2005-01-14 devnull that correspond to the
76 78e51a8c 2005-01-14 devnull parenthesized subexpressions of
77 78e51a8c 2005-01-14 devnull .IR exp :
78 78e51a8c 2005-01-14 devnull .BI match[ i ].sp
79 78e51a8c 2005-01-14 devnull points to the beginning and
80 78e51a8c 2005-01-14 devnull .BI match[ i ].ep
81 78e51a8c 2005-01-14 devnull points just beyond
82 78e51a8c 2005-01-14 devnull the end of the
83 78e51a8c 2005-01-14 devnull .IR i th
84 78e51a8c 2005-01-14 devnull substring.
85 78e51a8c 2005-01-14 devnull (Subexpression
86 78e51a8c 2005-01-14 devnull .I i
87 78e51a8c 2005-01-14 devnull begins at the
88 78e51a8c 2005-01-14 devnull .IR i th
89 78e51a8c 2005-01-14 devnull left parenthesis, counting from 1.)
90 78e51a8c 2005-01-14 devnull Pointers in
91 78e51a8c 2005-01-14 devnull .B match[0]
92 78e51a8c 2005-01-14 devnull pick out the substring that corresponds to
93 78e51a8c 2005-01-14 devnull the whole regular expression.
94 78e51a8c 2005-01-14 devnull Unused elements of
95 78e51a8c 2005-01-14 devnull .I match
96 78e51a8c 2005-01-14 devnull are filled with zeros.
97 78e51a8c 2005-01-14 devnull Matches involving
98 78e51a8c 2005-01-14 devnull .LR * ,
99 78e51a8c 2005-01-14 devnull .LR + ,
100 78e51a8c 2005-01-14 devnull and
101 78e51a8c 2005-01-14 devnull .L ?
102 78e51a8c 2005-01-14 devnull are extended as far as possible.
103 78e51a8c 2005-01-14 devnull The number of array elements in
104 78e51a8c 2005-01-14 devnull .I match
105 78e51a8c 2005-01-14 devnull is given by
106 78e51a8c 2005-01-14 devnull .IR msize .
107 78e51a8c 2005-01-14 devnull The structure of elements of
108 78e51a8c 2005-01-14 devnull .I match
109 78e51a8c 2005-01-14 devnull is:
110 78e51a8c 2005-01-14 devnull .IP
111 78e51a8c 2005-01-14 devnull .EX
112 78e51a8c 2005-01-14 devnull typedef struct {
113 78e51a8c 2005-01-14 devnull union {
114 78e51a8c 2005-01-14 devnull char *sp;
115 78e51a8c 2005-01-14 devnull Rune *rsp;
116 78e51a8c 2005-01-14 devnull };
117 78e51a8c 2005-01-14 devnull union {
118 78e51a8c 2005-01-14 devnull char *ep;
119 78e51a8c 2005-01-14 devnull Rune *rep;
120 78e51a8c 2005-01-14 devnull };
121 78e51a8c 2005-01-14 devnull } Resub;
122 78e51a8c 2005-01-14 devnull .EE
123 78e51a8c 2005-01-14 devnull .LP
124 78e51a8c 2005-01-14 devnull If
125 78e51a8c 2005-01-14 devnull .B match[0].sp
126 78e51a8c 2005-01-14 devnull is nonzero on entry,
127 78e51a8c 2005-01-14 devnull .I regexec
128 78e51a8c 2005-01-14 devnull starts matching at that point within
129 78e51a8c 2005-01-14 devnull .IR string .
130 78e51a8c 2005-01-14 devnull If
131 78e51a8c 2005-01-14 devnull .B match[0].ep
132 78e51a8c 2005-01-14 devnull is nonzero on entry,
133 78e51a8c 2005-01-14 devnull the last character matched is the one
134 78e51a8c 2005-01-14 devnull preceding that point.
135 78e51a8c 2005-01-14 devnull .PP
136 78e51a8c 2005-01-14 devnull .I Regsub
137 78e51a8c 2005-01-14 devnull places in
138 78e51a8c 2005-01-14 devnull .I dest
139 78e51a8c 2005-01-14 devnull a substitution instance of
140 78e51a8c 2005-01-14 devnull .I source
141 78e51a8c 2005-01-14 devnull in the context of the last
142 78e51a8c 2005-01-14 devnull .I regexec
143 78e51a8c 2005-01-14 devnull performed using
144 78e51a8c 2005-01-14 devnull .IR match .
145 78e51a8c 2005-01-14 devnull Each instance of
146 78e51a8c 2005-01-14 devnull .BI \e n\f1,
147 78e51a8c 2005-01-14 devnull where
148 78e51a8c 2005-01-14 devnull .I n
149 78e51a8c 2005-01-14 devnull is a digit, is replaced by the
150 78e51a8c 2005-01-14 devnull string delimited by
151 78e51a8c 2005-01-14 devnull .BI match[ n ].sp
152 78e51a8c 2005-01-14 devnull and
153 78e51a8c 2005-01-14 devnull .BI match[ n ].ep\f1.
154 78e51a8c 2005-01-14 devnull Each instance of
155 78e51a8c 2005-01-14 devnull .L &
156 78e51a8c 2005-01-14 devnull is replaced by the string delimited by
157 78e51a8c 2005-01-14 devnull .B match[0].sp
158 78e51a8c 2005-01-14 devnull and
159 78e51a8c 2005-01-14 devnull .BR match[0].ep .
160 78e51a8c 2005-01-14 devnull The substitution will always be null terminated and
161 78e51a8c 2005-01-14 devnull trimmed to fit into dlen bytes.
162 78e51a8c 2005-01-14 devnull .PP
163 78e51a8c 2005-01-14 devnull .IR Regerror ,
164 78e51a8c 2005-01-14 devnull called whenever an error is detected in
165 78e51a8c 2005-01-14 devnull .IR regcomp ,
166 78e51a8c 2005-01-14 devnull writes the string
167 78e51a8c 2005-01-14 devnull .I msg
168 78e51a8c 2005-01-14 devnull on the standard error file and exits.
169 78e51a8c 2005-01-14 devnull .I Regerror
170 78e51a8c 2005-01-14 devnull can be replaced to perform
171 78e51a8c 2005-01-14 devnull special error processing.
172 78e51a8c 2005-01-14 devnull If the user supplied
173 78e51a8c 2005-01-14 devnull .I regerror
174 78e51a8c 2005-01-14 devnull returns rather than exits,
175 78e51a8c 2005-01-14 devnull .I regcomp
176 78e51a8c 2005-01-14 devnull will return 0.
177 78e51a8c 2005-01-14 devnull .PP
178 78e51a8c 2005-01-14 devnull .I Rregexec
179 78e51a8c 2005-01-14 devnull and
180 78e51a8c 2005-01-14 devnull .I rregsub
181 78e51a8c 2005-01-14 devnull are variants of
182 78e51a8c 2005-01-14 devnull .I regexec
183 78e51a8c 2005-01-14 devnull and
184 78e51a8c 2005-01-14 devnull .I regsub
185 78e51a8c 2005-01-14 devnull that use strings of
186 78e51a8c 2005-01-14 devnull .B Runes
187 78e51a8c 2005-01-14 devnull instead of strings of
188 78e51a8c 2005-01-14 devnull .BR chars .
189 78e51a8c 2005-01-14 devnull With these routines, the
190 78e51a8c 2005-01-14 devnull .I rsp
191 78e51a8c 2005-01-14 devnull and
192 78e51a8c 2005-01-14 devnull .I rep
193 78e51a8c 2005-01-14 devnull fields of the
194 78e51a8c 2005-01-14 devnull .I match
195 78e51a8c 2005-01-14 devnull array elements should be used.
196 78e51a8c 2005-01-14 devnull .SH SOURCE
197 a3993885 2017-09-01 rsc .B https://9fans.github.io/plan9port/unix
198 78e51a8c 2005-01-14 devnull .SH "SEE ALSO"
199 78e51a8c 2005-01-14 devnull .IR grep (1)
200 78e51a8c 2005-01-14 devnull .SH DIAGNOSTICS
201 78e51a8c 2005-01-14 devnull .I Regcomp
202 78e51a8c 2005-01-14 devnull returns
203 78e51a8c 2005-01-14 devnull .B 0
204 78e51a8c 2005-01-14 devnull for an illegal expression
205 78e51a8c 2005-01-14 devnull or other failure.
206 78e51a8c 2005-01-14 devnull .I Regexec
207 78e51a8c 2005-01-14 devnull returns 0
208 78e51a8c 2005-01-14 devnull if
209 78e51a8c 2005-01-14 devnull .I string
210 78e51a8c 2005-01-14 devnull is not matched.
211 78e51a8c 2005-01-14 devnull .SH BUGS
212 78e51a8c 2005-01-14 devnull There is no way to specify or match a NUL character; NULs terminate patterns and strings.