Print this page
9083 replace regex implementation with tre
*** 72,84 ****
.\" information: Portions Copyright [yyyy] [name of copyright owner]
.\"
.\"
.\" Copyright (c) 1992, X/Open Company Limited. All Rights Reserved.
.\" Portions Copyright (c) 2003, Sun Microsystems, Inc. All Rights Reserved.
! .\" Copyright 2017 Nexenta Systems, Inc.
.\"
! .Dd June 14, 2017
.Dt REGCOMP 3C
.Os
.Sh NAME
.Nm regcomp ,
.Nm regexec ,
--- 72,84 ----
.\" information: Portions Copyright [yyyy] [name of copyright owner]
.\"
.\"
.\" Copyright (c) 1992, X/Open Company Limited. All Rights Reserved.
.\" Portions Copyright (c) 2003, Sun Microsystems, Inc. All Rights Reserved.
! .\" Copyright 2018 Nexenta Systems, Inc.
.\"
! .Dd February 3, 2018
.Dt REGCOMP 3C
.Os
.Sh NAME
.Nm regcomp ,
.Nm regexec ,
*** 168,177 ****
--- 168,180 ----
.Dv REG_EXTENDED
and
.Dv REG_NOSPEC
may not be used in the same call to
.Fn regcomp .
+ .It Dv REG_LITERAL
+ An alias of
+ .Dv REG_NOSPEC .
.It Dv REG_ICASE
Compile for matching that ignores upper/lower case distinctions.
See
.Xr regex 5 .
.It Dv REG_NOSUB
*** 480,522 ****
If
.Fa errbuf_size
is 0,
.Fa errbuf
is ignored but the return value is still correct.
- .Pp
- If the
- .Fa errcode
- given to
- .Fn regerror
- is first ORed with
- .Dv REG_ITOA ,
- the
- .Qq message
- that results is the printable name of the error code, e.g.
- .Qq Dv REG_NOMATCH ,
- rather than an explanation thereof.
- If
- .Fa errcode
- is
- .Dv REG_ATOI ,
- then
- .Fa preg
- shall be non-NULL and the
- .Va re_endp
- member of the structure it points to must point to the printable name of an
- error code; in this case, the result in
- .Fa errbuf
- is the decimal digits of the numeric value of the error code
- .Pq 0 if the name is not recognized .
- .Dv REG_ITOA
- and
- .Dv REG_ATOI
- are intended primarily as debugging facilities; they are extensions,
- compatible with but not specified by
- .St -p1003.2 ,
- and should be used with caution in software intended to be portable to other
- systems.
.Ss Fn regfree
The
.Fn regfree
function frees any dynamically-allocated storage associated with the compiled RE
pointed to by
--- 483,492 ----
*** 526,605 ****
is no longer a valid compiled RE and the effect of supplying it to
.Fn regexec
or
.Fn regerror
is undefined.
- .Sh IMPLEMENTATION NOTES
- There are a number of decisions that
- .St -p1003.2
- leaves up to the implementor,
- either by explicitly saying
- .Qq undefined
- or by virtue of them being forbidden by the RE grammar.
- This implementation treats them as follows.
- .Pp
- There is no particular limit on the length of REs, except insofar as memory is
- limited.
- Memory usage is approximately linear in RE size, and largely insensitive
- to RE complexity, except for bounded repetitions.
- .Pp
- A backslashed character other than one specifically given a magic meaning by
- .St -p1003.2
- .Pq such magic meanings occur only in BREs
- is taken as an ordinary character.
- .Pp
- Any unmatched
- .Qq \&[
- is a
- .Dv REG_EBRACK
- error.
- .Pp
- Equivalence classes cannot begin or end bracket-expression ranges.
- The endpoint of one range cannot begin another.
- .Pp
- .Dv RE_DUP_MAX ,
- the limit on repetition counts in bounded repetitions, is 255.
- .Pp
- A repetition operator
- .Po
- .Qq \&? ,
- .Qq \&* ,
- .Qq \&+ ,
- or bounds
- .Pc
- cannot follow another repetition operator.
- A repetition operator cannot begin an expression or subexpression
- or follow
- .Qq \&^
- or
- .Qq \&| .
- .Pp
- .Qq \&|
- cannot appear first or last in a (sub)expression or after another
- .Qq \&| ,
- i.e., an operand of
- .Qq \&|
- cannot be an empty subexpression.
- An empty parenthesized subexpression,
- .Qq () ,
- is legal and matches an empty (sub)string.
- An empty string is not a legal RE.
- .Pp
- A
- .Qq \&{
- followed by a digit is considered the beginning of bounds for a bounded
- repetition, which must then follow the syntax for bounds.
- A
- .Qq \&{
- .Em not
- followed by a digit is considered an ordinary character.
- .Pp
- .Qq \&^
- and
- .Qq \&$
- beginning and ending subexpressions in BREs are anchors, not ordinary
- characters.
.Sh RETURN VALUES
On successful completion, the
.Fn regcomp
function returns 0.
Otherwise, it returns an integer value indicating an error as described in
--- 496,505 ----
*** 609,626 ****
On successful completion, the
.Fn regexec
function returns 0.
Otherwise it returns
.Dv REG_NOMATCH
! to indicate no match, or
! .Dv REG_ENOSYS
! to indicate that the function is not supported.
.Pp
Upon successful completion, the
.Fn regerror
function returns the number of bytes needed to hold the entire generated string.
- Otherwise, it returns 0 to indicate that the function is not implemented.
.Pp
The
.Fn regfree
function returns no value.
.Pp
--- 509,523 ----
On successful completion, the
.Fn regexec
function returns 0.
Otherwise it returns
.Dv REG_NOMATCH
! to indicate no match.
.Pp
Upon successful completion, the
.Fn regerror
function returns the number of bytes needed to hold the entire generated string.
.Pp
The
.Fn regfree
function returns no value.
.Pp
*** 671,680 ****
--- 568,581 ----
.Qq \&? ,
.Qq *
or
.Qq +
not preceded by valid regular expression.
+ .It Dv REG_EMPTY
+ Empty (sub)expression.
+ .It Dv REG_INVARG
+ Invalid argument, e.g. negative-length string.
.El
.Sh USAGE
An application could use:
.Bd -literal -offset Ds
regerror(code, preg, (char *)NULL, (size_t)0)