Cygwin: (mostly) drop NT4 and Samba < 3.0 support
[newlib-cygwin.git] / winsup / cygwin / regex / regex.3
blobd22dec1e87f7aeb373d429ead61636fe7bcf8ff3
1 .\" Copyright (c) 1992, 1993, 1994 Henry Spencer.
2 .\" Copyright (c) 1992, 1993, 1994
3 .\"     The Regents of the University of California.  All rights reserved.
4 .\"
5 .\" This code is derived from software contributed to Berkeley by
6 .\" Henry Spencer.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\" 3. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     @(#)regex.3     8.4 (Berkeley) 3/20/94
33 .\" $FreeBSD$
34 .\"
35 .Dd April 15, 2017
36 .Dt REGEX 3
37 .Os
38 .Sh NAME
39 .Nm regcomp ,
40 .Nm regexec ,
41 .Nm regerror ,
42 .Nm regfree
43 .Nd regular-expression library
44 .Sh LIBRARY
45 .Lb libc
46 .Sh SYNOPSIS
47 .In regex.h
48 .Ft int
49 .Fo regcomp
50 .Fa "regex_t * restrict preg" "const char * restrict pattern" "int cflags"
51 .Fc
52 .Ft int
53 .Fo regexec
54 .Fa "const regex_t * restrict preg" "const char * restrict string"
55 .Fa "size_t nmatch" "regmatch_t pmatch[restrict]" "int eflags"
56 .Fc
57 .Ft size_t
58 .Fo regerror
59 .Fa "int errcode" "const regex_t * restrict preg"
60 .Fa "char * restrict errbuf" "size_t errbuf_size"
61 .Fc
62 .Ft void
63 .Fn regfree "regex_t *preg"
64 .Sh DESCRIPTION
65 These routines implement
66 .St -p1003.2
67 regular expressions
68 .Pq Do RE Dc Ns s ;
69 see
70 .Xr re_format 7 .
71 The
72 .Fn regcomp
73 function
74 compiles an RE written as a string into an internal form,
75 .Fn regexec
76 matches that internal form against a string and reports results,
77 .Fn regerror
78 transforms error codes from either into human-readable messages,
79 and
80 .Fn regfree
81 frees any dynamically-allocated storage used by the internal form
82 of an RE.
83 .Pp
84 The header
85 .In regex.h
86 declares two structure types,
87 .Ft regex_t
88 and
89 .Ft regmatch_t ,
90 the former for compiled internal forms and the latter for match reporting.
91 It also declares the four functions,
92 a type
93 .Ft regoff_t ,
94 and a number of constants with names starting with
95 .Dq Dv REG_ .
96 .Pp
97 The
98 .Fn regcomp
99 function
100 compiles the regular expression contained in the
101 .Fa pattern
102 string,
103 subject to the flags in
104 .Fa cflags ,
105 and places the results in the
106 .Ft regex_t
107 structure pointed to by
108 .Fa preg .
110 .Fa cflags
111 argument
112 is the bitwise OR of zero or more of the following flags:
113 .Bl -tag -width REG_EXTENDED
114 .It Dv REG_EXTENDED
115 Compile modern
116 .Pq Dq extended
117 REs,
118 rather than the obsolete
119 .Pq Dq basic
120 REs that
121 are the default.
122 .It Dv REG_BASIC
123 This is a synonym for 0,
124 provided as a counterpart to
125 .Dv REG_EXTENDED
126 to improve readability.
127 .It Dv REG_NOSPEC
128 Compile with recognition of all special characters turned off.
129 All characters are thus considered ordinary,
130 so the
131 .Dq RE
132 is a literal string.
133 This is an extension,
134 compatible with but not specified by
135 .St -p1003.2 ,
136 and should be used with
137 caution in software intended to be portable to other systems.
138 .Dv REG_EXTENDED
140 .Dv REG_NOSPEC
141 may not be used
142 in the same call to
143 .Fn regcomp .
144 .It Dv REG_ICASE
145 Compile for matching that ignores upper/lower case distinctions.
147 .Xr re_format 7 .
148 .It Dv REG_NOSUB
149 Compile for matching that need only report success or failure,
150 not what was matched.
151 .It Dv REG_NEWLINE
152 Compile for newline-sensitive matching.
153 By default, newline is a completely ordinary character with no special
154 meaning in either REs or strings.
155 With this flag,
156 .Ql [^
157 bracket expressions and
158 .Ql .\&
159 never match newline,
161 .Ql ^\&
162 anchor matches the null string after any newline in the string
163 in addition to its normal function,
164 and the
165 .Ql $\&
166 anchor matches the null string before any newline in the
167 string in addition to its normal function.
168 .It Dv REG_PEND
169 The regular expression ends,
170 not at the first NUL,
171 but just before the character pointed to by the
172 .Va re_endp
173 member of the structure pointed to by
174 .Fa preg .
176 .Va re_endp
177 member is of type
178 .Ft "const char *" .
179 This flag permits inclusion of NULs in the RE;
180 they are considered ordinary characters.
181 This is an extension,
182 compatible with but not specified by
183 .St -p1003.2 ,
184 and should be used with
185 caution in software intended to be portable to other systems.
186 .It Dv REG_POSIX
187 Compile only
188 .St -p1003.2
189 compliant expressions.
190 This flag has no effect unless linking against
191 .Nm libregex .
192 This is an extension,
193 compatible with but not specified by
194 .St -p1003.2 ,
195 and should be used with
196 caution in software intended to be portable to other systems.
199 When successful,
200 .Fn regcomp
201 returns 0 and fills in the structure pointed to by
202 .Fa preg .
203 One member of that structure
204 (other than
205 .Va re_endp )
206 is publicized:
207 .Va re_nsub ,
208 of type
209 .Ft size_t ,
210 contains the number of parenthesized subexpressions within the RE
211 (except that the value of this member is undefined if the
212 .Dv REG_NOSUB
213 flag was used).
215 .Fn regcomp
216 fails, it returns a non-zero error code;
218 .Sx DIAGNOSTICS .
221 .Fn regexec
222 function
223 matches the compiled RE pointed to by
224 .Fa preg
225 against the
226 .Fa string ,
227 subject to the flags in
228 .Fa eflags ,
229 and reports results using
230 .Fa nmatch ,
231 .Fa pmatch ,
232 and the returned value.
233 The RE must have been compiled by a previous invocation of
234 .Fn regcomp .
235 The compiled form is not altered during execution of
236 .Fn regexec ,
237 so a single compiled RE can be used simultaneously by multiple threads.
239 By default,
240 the NUL-terminated string pointed to by
241 .Fa string
242 is considered to be the text of an entire line, minus any terminating
243 newline.
245 .Fa eflags
246 argument is the bitwise OR of zero or more of the following flags:
247 .Bl -tag -width REG_STARTEND
248 .It Dv REG_NOTBOL
249 The first character of the string is treated as the continuation
250 of a line.
251 This means that the anchors
252 .Ql ^\& ,
253 .Ql [[:<:]] ,
255 .Ql \e<
256 do not match before it; but see
257 .Dv REG_STARTEND
258 below.
259 This does not affect the behavior of newlines under
260 .Dv REG_NEWLINE .
261 .It Dv REG_NOTEOL
262 The NUL terminating
263 the string
264 does not end a line, so the
265 .Ql $\&
266 anchor does not match before it.
267 This does not affect the behavior of newlines under
268 .Dv REG_NEWLINE .
269 .It Dv REG_STARTEND
270 The string is considered to start at
271 .Fa string No +
272 .Fa pmatch Ns [0]. Ns Fa rm_so
273 and to end before the byte located at
274 .Fa string No +
275 .Fa pmatch Ns [0]. Ns Fa rm_eo ,
276 regardless of the value of
277 .Fa nmatch .
278 See below for the definition of
279 .Fa pmatch
281 .Fa nmatch .
282 This is an extension,
283 compatible with but not specified by
284 .St -p1003.2 ,
285 and should be used with
286 caution in software intended to be portable to other systems.
288 Without
289 .Dv REG_NOTBOL ,
290 the position
291 .Fa rm_so
292 is considered the beginning of a line, such that
293 .Ql ^
294 matches before it, and the beginning of a word if there is a word
295 character at this position, such that
296 .Ql [[:<:]]
298 .Ql \e<
299 match before it.
301 With
302 .Dv REG_NOTBOL ,
303 the character at position
304 .Fa rm_so
305 is treated as the continuation of a line, and if
306 .Fa rm_so
307 is greater than 0, the preceding character is taken into consideration.
308 If the preceding character is a newline and the regular expression was compiled
309 with
310 .Dv REG_NEWLINE ,
311 .Ql ^
312 matches before the string; if the preceding character is not a word character
313 but the string starts with a word character,
314 .Ql [[:<:]]
316 .Ql \e<
317 match before the string.
321 .Xr re_format 7
322 for a discussion of what is matched in situations where an RE or a
323 portion thereof could match any of several substrings of
324 .Fa string .
326 Normally,
327 .Fn regexec
328 returns 0 for success and the non-zero code
329 .Dv REG_NOMATCH
330 for failure.
331 Other non-zero error codes may be returned in exceptional situations;
333 .Sx DIAGNOSTICS .
336 .Dv REG_NOSUB
337 was specified in the compilation of the RE,
338 or if
339 .Fa nmatch
340 is 0,
341 .Fn regexec
342 ignores the
343 .Fa pmatch
344 argument (but see below for the case where
345 .Dv REG_STARTEND
346 is specified).
347 Otherwise,
348 .Fa pmatch
349 points to an array of
350 .Fa nmatch
351 structures of type
352 .Ft regmatch_t .
353 Such a structure has at least the members
354 .Va rm_so
356 .Va rm_eo ,
357 both of type
358 .Ft regoff_t
359 (a signed arithmetic type at least as large as an
360 .Ft off_t
361 and a
362 .Ft ssize_t ) ,
363 containing respectively the offset of the first character of a substring
364 and the offset of the first character after the end of the substring.
365 Offsets are measured from the beginning of the
366 .Fa string
367 argument given to
368 .Fn regexec .
369 An empty substring is denoted by equal offsets,
370 both indicating the character following the empty substring.
372 The 0th member of the
373 .Fa pmatch
374 array is filled in to indicate what substring of
375 .Fa string
376 was matched by the entire RE.
377 Remaining members report what substring was matched by parenthesized
378 subexpressions within the RE;
379 member
380 .Va i
381 reports subexpression
382 .Va i ,
383 with subexpressions counted (starting at 1) by the order of their opening
384 parentheses in the RE, left to right.
385 Unused entries in the array (corresponding either to subexpressions that
386 did not participate in the match at all, or to subexpressions that do not
387 exist in the RE (that is,
388 .Va i
390 .Fa preg Ns -> Ns Va re_nsub ) )
391 have both
392 .Va rm_so
394 .Va rm_eo
395 set to -1.
396 If a subexpression participated in the match several times,
397 the reported substring is the last one it matched.
398 (Note, as an example in particular, that when the RE
399 .Ql "(b*)+"
400 matches
401 .Ql bbb ,
402 the parenthesized subexpression matches each of the three
403 .So Li b Sc Ns s
404 and then
405 an infinite number of empty strings following the last
406 .Ql b ,
407 so the reported substring is one of the empties.)
410 .Dv REG_STARTEND
411 is specified,
412 .Fa pmatch
413 must point to at least one
414 .Ft regmatch_t
415 (even if
416 .Fa nmatch
417 is 0 or
418 .Dv REG_NOSUB
419 was specified),
420 to hold the input offsets for
421 .Dv REG_STARTEND .
422 Use for output is still entirely controlled by
423 .Fa nmatch ;
425 .Fa nmatch
426 is 0 or
427 .Dv REG_NOSUB
428 was specified,
429 the value of
430 .Fa pmatch Ns [0]
431 will not be changed by a successful
432 .Fn regexec .
435 .Fn regerror
436 function
437 maps a non-zero
438 .Fa errcode
439 from either
440 .Fn regcomp
442 .Fn regexec
443 to a human-readable, printable message.
445 .Fa preg
447 .No non\- Ns Dv NULL ,
448 the error code should have arisen from use of
450 .Ft regex_t
451 pointed to by
452 .Fa preg ,
453 and if the error code came from
454 .Fn regcomp ,
455 it should have been the result from the most recent
456 .Fn regcomp
457 using that
458 .Ft regex_t .
461 .Fn regerror
462 may be able to supply a more detailed message using information
463 from the
464 .Ft regex_t .
467 .Fn regerror
468 function
469 places the NUL-terminated message into the buffer pointed to by
470 .Fa errbuf ,
471 limiting the length (including the NUL) to at most
472 .Fa errbuf_size
473 bytes.
474 If the whole message will not fit,
475 as much of it as will fit before the terminating NUL is supplied.
476 In any case,
477 the returned value is the size of buffer needed to hold the whole
478 message (including terminating NUL).
480 .Fa errbuf_size
481 is 0,
482 .Fa errbuf
483 is ignored but the return value is still correct.
485 If the
486 .Fa errcode
487 given to
488 .Fn regerror
489 is first ORed with
490 .Dv REG_ITOA ,
492 .Dq message
493 that results is the printable name of the error code,
494 e.g.\&
495 .Dq Dv REG_NOMATCH ,
496 rather than an explanation thereof.
498 .Fa errcode
500 .Dv REG_ATOI ,
501 then
502 .Fa preg
503 shall be
504 .No non\- Ns Dv NULL
505 and the
506 .Va re_endp
507 member of the structure it points to
508 must point to the printable name of an error code;
509 in this case, the result in
510 .Fa errbuf
511 is the decimal digits of
512 the numeric value of the error code
513 (0 if the name is not recognized).
514 .Dv REG_ITOA
516 .Dv REG_ATOI
517 are intended primarily as debugging facilities;
518 they are extensions,
519 compatible with but not specified by
520 .St -p1003.2 ,
521 and should be used with
522 caution in software intended to be portable to other systems.
523 Be warned also that they are considered experimental and changes are possible.
526 .Fn regfree
527 function
528 frees any dynamically-allocated storage associated with the compiled RE
529 pointed to by
530 .Fa preg .
531 The remaining
532 .Ft regex_t
533 is no longer a valid compiled RE
534 and the effect of supplying it to
535 .Fn regexec
537 .Fn regerror
538 is undefined.
540 None of these functions references global variables except for tables
541 of constants;
542 all are safe for use from multiple threads if the arguments are safe.
543 .Sh IMPLEMENTATION CHOICES
544 There are a number of decisions that
545 .St -p1003.2
546 leaves up to the implementor,
547 either by explicitly saying
548 .Dq undefined
549 or by virtue of them being
550 forbidden by the RE grammar.
551 This implementation treats them as follows.
554 .Xr re_format 7
555 for a discussion of the definition of case-independent matching.
557 There is no particular limit on the length of REs,
558 except insofar as memory is limited.
559 Memory usage is approximately linear in RE size, and largely insensitive
560 to RE complexity, except for bounded repetitions.
562 .Sx BUGS
563 for one short RE using them
564 that will run almost any system out of memory.
566 A backslashed character other than one specifically given a magic meaning
568 .St -p1003.2
569 (such magic meanings occur only in obsolete
570 .Bq Dq basic
571 REs)
572 is taken as an ordinary character.
574 Any unmatched
575 .Ql [\&
576 is a
577 .Dv REG_EBRACK
578 error.
580 Equivalence classes cannot begin or end bracket-expression ranges.
581 The endpoint of one range cannot begin another.
583 .Dv RE_DUP_MAX ,
584 the limit on repetition counts in bounded repetitions, is 255.
586 A repetition operator
587 .Ql ( ?\& ,
588 .Ql *\& ,
589 .Ql +\& ,
590 or bounds)
591 cannot follow another
592 repetition operator.
593 A repetition operator cannot begin an expression or subexpression
594 or follow
595 .Ql ^\&
597 .Ql |\& .
599 .Ql |\&
600 cannot appear first or last in a (sub)expression or after another
601 .Ql |\& ,
602 i.e., an operand of
603 .Ql |\&
604 cannot be an empty subexpression.
605 An empty parenthesized subexpression,
606 .Ql "()" ,
607 is legal and matches an
608 empty (sub)string.
609 An empty string is not a legal RE.
612 .Ql {\&
613 followed by a digit is considered the beginning of bounds for a
614 bounded repetition, which must then follow the syntax for bounds.
616 .Ql {\&
617 .Em not
618 followed by a digit is considered an ordinary character.
620 .Ql ^\&
622 .Ql $\&
623 beginning and ending subexpressions in obsolete
624 .Pq Dq basic
625 REs are anchors, not ordinary characters.
626 .Sh DIAGNOSTICS
627 Non-zero error codes from
628 .Fn regcomp
630 .Fn regexec
631 include the following:
633 .Bl -tag -width REG_ECOLLATE -compact
634 .It Dv REG_NOMATCH
636 .Fn regexec
637 function
638 failed to match
639 .It Dv REG_BADPAT
640 invalid regular expression
641 .It Dv REG_ECOLLATE
642 invalid collating element
643 .It Dv REG_ECTYPE
644 invalid character class
645 .It Dv REG_EESCAPE
646 .Ql \e
647 applied to unescapable character
648 .It Dv REG_ESUBREG
649 invalid backreference number
650 .It Dv REG_EBRACK
651 brackets
652 .Ql "[ ]"
653 not balanced
654 .It Dv REG_EPAREN
655 parentheses
656 .Ql "( )"
657 not balanced
658 .It Dv REG_EBRACE
659 braces
660 .Ql "{ }"
661 not balanced
662 .It Dv REG_BADBR
663 invalid repetition count(s) in
664 .Ql "{ }"
665 .It Dv REG_ERANGE
666 invalid character range in
667 .Ql "[ ]"
668 .It Dv REG_ESPACE
669 ran out of memory
670 .It Dv REG_BADRPT
671 .Ql ?\& ,
672 .Ql *\& ,
674 .Ql +\&
675 operand invalid
676 .It Dv REG_EMPTY
677 empty (sub)expression
678 .It Dv REG_ASSERT
679 cannot happen - you found a bug
680 .It Dv REG_INVARG
681 invalid argument, e.g.\& negative-length string
682 .It Dv REG_ILLSEQ
683 illegal byte sequence (bad multibyte character)
685 .Sh SEE ALSO
686 .Xr grep 1 ,
687 .Xr re_format 7
689 .St -p1003.2 ,
690 sections 2.8 (Regular Expression Notation)
692 B.5 (C Binding for Regular Expression Matching).
693 .Sh HISTORY
694 Originally written by
695 .An Henry Spencer .
696 Altered for inclusion in the
697 .Bx 4.4
698 distribution.
699 .Sh BUGS
700 This is an alpha release with known defects.
701 Please report problems.
703 The back-reference code is subtle and doubts linger about its correctness
704 in complex cases.
707 .Fn regexec
708 function
709 performance is poor.
710 This will improve with later releases.
712 .Fa nmatch
713 argument
714 exceeding 0 is expensive;
715 .Fa nmatch
716 exceeding 1 is worse.
718 .Fn regexec
719 function
720 is largely insensitive to RE complexity
721 .Em except
722 that back
723 references are massively expensive.
724 RE length does matter; in particular, there is a strong speed bonus
725 for keeping RE length under about 30 characters,
726 with most special characters counting roughly double.
729 .Fn regcomp
730 function
731 implements bounded repetitions by macro expansion,
732 which is costly in time and space if counts are large
733 or bounded repetitions are nested.
734 An RE like, say,
735 .Ql "((((a{1,100}){1,100}){1,100}){1,100}){1,100}"
736 will (eventually) run almost any existing machine out of swap space.
738 There are suspected problems with response to obscure error conditions.
739 Notably,
740 certain kinds of internal overflow,
741 produced only by truly enormous REs or by multiply nested bounded repetitions,
742 are probably not handled well.
744 Due to a mistake in
745 .St -p1003.2 ,
746 things like
747 .Ql "a)b"
748 are legal REs because
749 .Ql )\&
751 a special character only in the presence of a previous unmatched
752 .Ql (\& .
753 This cannot be fixed until the spec is fixed.
755 The standard's definition of back references is vague.
756 For example, does
757 .Ql "a\e(\e(b\e)*\e2\e)*d"
758 match
759 .Ql "abbbd" ?
760 Until the standard is clarified,
761 behavior in such cases should not be relied on.
763 The implementation of word-boundary matching is a bit of a kludge,
764 and bugs may lurk in combinations of word-boundary matching and anchoring.
766 Word-boundary matching does not work properly in multibyte locales.