wsregexp(3W)

wsregexp: wsrecompile, wsrestep, wsrematch, wsreerr - Wide character based regular expression compile and match routines

As shipped in IRIX 6.5.5. Unchanged since IRIX 6.5.

NAME
     wsregexp:  wsrecompile, wsrestep, wsrematch, wsreerr - Wide character
     based regular expression compile and match routines

SYNOPSIS
     #include <wsregexp.h>
     #include <widec.h>
     long wsrecompile(struct rexdata *prex, long *expbuf,
                         long *endbuf, wchar_t eof);
     int  wsrestep(struct rexdata *prex, wchar_t *wstr, long *expbuf);
     int  wsrematch(struct rexdata *prex, wchar_t *wstr, long *expbuf);
     char *wsreerr(int err);

DESCRIPTION
     These functions are general purpose internationalized regular expression
     matching routines to be used in programs that perform regular expression
     matching.  These functions are defined by the wsregexp.h header file.

     The function wsrecompile takes as input an internationalized regular
     expression as defined below (apart from the normal regular expressions as
     defined by regexp) and produces a compiled expression that can be used
     with wsrestep or wsrematch.
          struct rexdata {
               short     sed;      /* flag for sed */
               wchar_t   *str;     /* regular expression */
               int       err;      /* returned error code, 0 = no error */
               wchar_t   *loc1;
               wchar_t   *loc2;
               int       circf;
               ...
          };

     The first parameter, prex, is a pointer to the specification of the
     regular expression. prex->sed should be non-zero if sed style delimiter
     syntax is to be adopted. prex->str should point to the regular expression
     that needs to be compiled. The regular expression string should be in
     wide character format. prex->err indicated any error during the
     compilation and use of this regular expression.  expbuf points to the
     place where the compiled regular expression will be placed. endbuf points
     to the first long after the space where the compiled regular expression
     may be placed.  (endbuf-expbuf) should be large enough for the compiled
     regular expression to fit.  eof is the wide character which marks the end
     of the regular expression.  This character is usually a / (slash).

     If wsrecompile was successful, it returns the pointer to the end of the
     regular expression, endbuf. Otherwise, 0 is returned and the error code
     is set in prex->err.

     The functions wsrestep and wsrematch do pattern matching given a null
     terminated wide character string wstr and a compiled regular expression
     expbuf as input. expbuf for these functions should be the compiled
     regular expression which was obtained by a call to the function
     wsrecompile.

     The function wsrestep returns non-zero if some substring of wstr matches
     the regular expression in expbuf and zero if there is no match.  The
     function wsrematch returns non-zero if a substring of wstr starting from
     the beginning matches the regular expression in expbuf and zero if there
     is no match.  If there is a match, prex->loc1 and prex->loc2 are set.
     prex->loc1 points to the first wide character that matched the regular
     expression; prex->loc2 points to the wide character after the last wide
     character that matches the regular expression.  Thus if the regular
     expression matches the entire input string, prex->loc1 will point to the
     first wide character of wstr and prex->loc2 will point to the null at the
     end of wstr.

     wsrestep uses the variable circf of struct rexdata which is set by
     wsrecompile if the regular expression begins with ^ (caret). If this is
     set then wsrestep will try to match the regular expression to the
     beginning of the string only. If more than one regular expression is to
     be compiled before the first is executed, the value of prex->circf should
     be saved for each compiled expression and should be set to that saved
     value before each call to wsrestep.

     wsreerr returns the error message corresponding to the error code in the
     language of the current locale. The error code err should be one returned
     by the wsregexp functions in the err variable of struct rexdata.

     The internationalized regular expressions available for use with the
     wsregexp functions are constructed as follows:

     Expression  Meaning

     c           the character c where c is not a special character.

     [[:class:]] class is any character type as defined by the LC_TYPE locale
                 catagory. class can be one of the following

                 alpha   a letter

                 upper   an upper-case letter

                 lower   a lower-case letter

                 digit   a decimal digit

                 xdigit  a hexadecimal digit

                 alnum   an alphanumeric character

                 space   any whitespace character

                 punct   a punctuation character

                 print   a printable character

                 graph   a character that has a visible representation

                 cntrl   a control character

     [[=c=]]     An equivalence class, or, any collation element defined as
                 having the same relative order in the current collation
                 sequence as c.  As an example, if A and a belong to the same
                 equivalence class, then both [[=A=]b]] and [[=a=]b]] are
                 equivalent to [Aab].

     [[.cc.]]    This represents a multi-character collating symbol.  Multi-
                 character collating elements must be represented as collating
                 symbols to distinguish them from single-character collating
                 elements. As an example, if the string ab is a valid
                 collating element, then [[.ab.]] will be treated as an
                 element and will match the same string of characters, while
                 ab will match the list of characters a and b. If the multi-
                 character collating symbol is not a valid collating element
                 in the current collating sequence definition, the symbol will
                 be treated as an invalid expression.

     [[c-c]]     Any collation element in the character expression range c-c,
                 where c can identify a collating symbol or an equivalence
                 class.  If the character - (hyphen) appears immediately after
                 an opening square bracker, e.g. [-c], or immediately prior to
                 a closing square bracket, e.g. [c-], it has no special
                 meaning.

     Immediately following an opening square bracket ^ means the complement
     of, e.g. [^c]. Otherwise, it has no special meaning.

     Within square brackets, a . that is not part of a [[.cc.]]  sequence, or
     a : that is not part of a [[:class:]] sequence, matches itself.

SEE ALSO
     regexp(5)

DIAGNOSTICS
     Errors are:

          ERR_NORMBR               no remembered search string

          ERR_REOVFLOW             regexp overflow
                                   This happens when wsrecompile cant fit the
                                   compiled regular expression in (endbuf-
                                   expbuf).

          ERR_BRA                  ( ) imbalance

          ERR_DELIM                illegal or missing delimiter.

          ERR_NBR                  bad number in { }

          ERR_2MNBR                more than 2 numbers given in { }

          ERR_DIGIT                digit out of range

          ERR_2MLBRA               too many (

          ERR_RANGE                range number too large

          ERR_MISSB                } expected after \

          ERR_BADRNG               first number exceeds second in { }.

          ERR_SIMBAL               [ ] imbalance.

          ERR_SYNTAX               illegal regular expression

          ERR_ILLCLASS             illegal [:class:]

          ERR_EQUIL                illegal [=class=]

          ERR_COLL                 illegal [.cc.]

EXAMPLE
     The following is an example of how the regular expression macros and
     calls might be defined by an application program:

          #include <wsregexp.h>
          #include <widec.h>
           . . .
          struct rexdata rex;
          long expbuf [BUFSIZ];      /* Buffer for the compiled RE */

          /* Define a RE to identify a capitalized word */
          char *regexp = "[[:space:]][[:upper:]]";
          wchar_t wregexp [512];
          wchar_t weof;              /* The end of regular expression */
          char eof = '\0';

          wchar_t linebuf [BUFSIZ];  /* Buffer for the input string */
           . . .
          (void) mbstowcs(wregexp, regexp, strlen(regexp)+1);
          (void) mbtowc(&weof, &eof, 1);
          rex.str = wregexp;
          rex.sed = 0;
          rex.err = 0;
          if (!wsrecompile(&rex, expbuf, &expbuf[BUFSIZ], weof))
                  fprintf(stderr, "%s\n", wsreerr(rex.err));
           . . .
          if (wsrestep(&rex, linebuf, expbuf))
                  succeed;