home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / ixemul-39.47-env-bin.lha / man / cat3 / regexp.0 < prev    next >
Text File  |  1993-12-07  |  8KB  |  199 lines

  1.  
  2. REGEXP(3)                  UNIX Programmer's Manual                  REGEXP(3)
  3.  
  4. NNAAMMEE
  5.      rreeggccoommpp, rreeggeexxeecc, rreeggssuubb, rreeggeerrrroorr - regular expression handlers
  6.  
  7. SSYYNNOOPPSSIISS
  8.      ##iinncclluuddee <<rreeggeexxpp..hh>>
  9.  
  10.      _r_e_g_e_x_p _*
  11.      rreeggccoommpp(_c_o_n_s_t _c_h_a_r _*_e_x_p)
  12.  
  13.      _i_n_t
  14.      rreeggeexxeecc(_c_o_n_s_t _r_e_g_e_x_p _*_p_r_o_g, _c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g)
  15.  
  16.      _v_o_i_d
  17.      rreeggssuubb(_c_o_n_s_t _r_e_g_e_x_p _*_p_r_o_g, _c_o_n_s_t _c_h_a_r _*_s_o_u_r_c_e, _c_h_a_r _*_d_e_s_t)
  18.  
  19. DDEESSCCRRIIPPTTIIOONN
  20.      The rreeggccoommpp(), rreeggeexxeecc(), rreeggssuubb(), and rreeggeerrrroorr() functions implement
  21.      egrep(1)­style  regular expressions and supporting facilities.
  22.  
  23.      The rreeggccoommpp() function compiles a regular expression into a structure of
  24.      type regexp,  and returns a pointer to it.  The space has been allocated
  25.      using malloc(3) and may be released by free.
  26.  
  27.      The rreeggeexxeecc() function matches a NUL­terminated _s_t_r_i_n_g against the com­
  28.      piled regular expression in _p_r_o_g. It returns 1 for success and 0 for
  29.      failure, and adjusts the contents of _p_r_o_g's _s_t_a_r_t_p and _e_n_d_p (see below)
  30.      accordingly.
  31.  
  32.      The members of a regexp structure include at least the following (not
  33.      necessarily in order):
  34.  
  35.            char *startp[NSUBEXP];
  36.            char *endp[NSUBEXP];
  37.  
  38.      where NSUBEXP is defined (as 10) in the header file.  Once a successful
  39.      rreeggeexxeecc() has been done using the rreeggeexxpp(), each _s_t_a_r_t_p­ _e_n_d_p pair de­
  40.      scribes one substring within the _s_t_r_i_n_g, with the _s_t_a_r_t_p pointing to the
  41.      first character of the substring and the _e_n_d_p pointing to the first char­
  42.      acter following the substring.  The 0th substring is the substring of
  43.      _s_t_r_i_n_g that matched the whole regular expression.  The others are those
  44.      substrings that matched parenthesized expressions within the regular ex­
  45.      pression, with parenthesized expressions numbered in left­to­right order
  46.      of their opening parentheses.
  47.  
  48.      The rreeggssuubb() function copies _s_o_u_r_c_e to _d_e_s_t, making substitutions accord­
  49.      ing to the most recent rreeggeexxeecc() performed using _p_r_o_g. Each instance of
  50.      `&' in _s_o_u_r_c_e is replaced by the substring indicated by _s_t_a_r_t_p[] and
  51.      _e_n_d_p[]. Each instance of `\_n', where _n is a digit, is replaced by the
  52.      substring indicated by _s_t_a_r_t_p[_n] and _e_n_d_p[_n]. To get a literal `&' or
  53.      `\_n' into _d_e_s_t, prefix it with `\'; to get a literal `\' preceding `&' or
  54.      `\_n', prefix it with another `\'.
  55.  
  56.      The rreeggeerrrroorr() function is called whenever an error is detected in
  57.      rreeggccoommpp(), rreeggeexxeecc(), or rreeggssuubb().  The default rreeggeerrrroorr() writes the
  58.      string _m_s_g, with a suitable indicator of origin, on the standard error
  59.      output and invokes exit(2).  The rreeggeerrrroorr() function can be replaced by
  60.      the user if other actions are desirable.
  61.  
  62. RREEGGUULLAARR EEXXPPRREESSSSIIOONN SSYYNNTTAAXX
  63.      A regular expression is zero or more _b_r_a_n_c_h_e_s, separated by `|'.  It
  64.      matches anything that matches one of the branches.
  65.  
  66.  
  67.      A branch is zero or more _p_i_e_c_e_s, concatenated.  It matches a match for
  68.      the first, followed by a match for the second, etc.
  69.  
  70.      A piece is an _a_t_o_m possibly followed by `*', `+', or `?'.  An atom fol­
  71.      lowed by `*' matches a sequence of 0 or more matches of the atom.  An
  72.      atom followed by `+' matches a sequence of 1 or more matches of the atom.
  73.      An atom followed by `?' matches a match of the atom, or the null string.
  74.  
  75.      An atom is a regular expression in parentheses (matching a match for the
  76.      regular expression), a _r_a_n_g_e (see below), `.'  (matching any single char­
  77.      acter), `^' (matching the null string at the beginning of the input
  78.      string), `$' (matching the null string at the end of the input string), a
  79.      `\' followed by a single character (matching that character), or a single
  80.      character with no other significance (matching that character).
  81.  
  82.      A _r_a_n_g_e is a sequence of characters enclosed in `[]'.  It normally match­
  83.      es any single character from the sequence.  If the sequence begins with
  84.      `^', it matches any single character _n_o_t from the rest of the sequence.
  85.      If two characters in the sequence are separated by `-', this is shorthand
  86.      for the full list of ASCII characters between them (e.g. `[0­9]' matches
  87.      any decimal digit).  To include a literal `]' in the sequence, make it
  88.      the first character (following a possible `^').  To include a literal
  89.      `-', make it the first or last character.
  90.  
  91. AAMMBBIIGGUUIITTYY
  92.      If a regular expression could match two different parts of the input
  93.      string, it will match the one which begins earliest.  If both begin in
  94.      the same place but match different lengths, or match the same length in
  95.      different ways, life gets messier, as follows.
  96.  
  97.      In general, the possibilities in a list of branches are considered in
  98.      left­to­right order, the possibilities for `*', `+', and `?' are consid­
  99.      ered longest­first, nested constructs are considered from the outermost
  100.      in, and concatenated constructs are considered leftmost­first.  The match
  101.      that will be chosen is the one that uses the earliest possibility in the
  102.      first choice that has to be made.  If there is more than one choice, the
  103.      next will be made in the same manner (earliest possibility) subject to
  104.      the decision on the first choice.  And so forth.
  105.  
  106.      For example, `(ab|a)b*c' could match `abc' in one of two ways.  The first
  107.      choice is between `ab' and `a'; since `ab' is earlier, and does lead to a
  108.      successful overall match, it is chosen.  Since the `b' is already spoken
  109.      for, the `b*' must match its last possibility­­the empty string­­since it
  110.      must respect the earlier choice.
  111.  
  112.      In the particular case where no `|'s are present and there is only one
  113.      `*', `+', or `?', the net effect is that the longest possible match will
  114.      be chosen.  So `ab*', presented with `xabbbby', will match `abbbb'.  Note
  115.      that if `ab*', is tried against `xabyabbbz', it will match `ab' just af­
  116.      ter `x', due to the begins­earliest rule.  (In effect, the decision on
  117.      where to start the match is the first choice to be made, hence subsequent
  118.      choices must respect it even if this leads them to less­preferred alter­
  119.      natives.)
  120.  
  121. RREETTUURRNN VVAALLUUEESS
  122.      The rreeggccoommpp() function returns NULL for a failure (rreeggeerrrroorr() permit­
  123.      ting), where failures are syntax errors, exceeding implementation limits,
  124.      or applying `+' or `*' to a possibly­null operand.
  125.  
  126. SSEEEE AALLSSOO
  127.      ed(1),  ex(1),  expr(1),  egrep(1),  fgrep(1),  grep(1),  regex(3)
  128.  
  129. HHIISSTTOORRYY
  130.      Both code and manual page for rreeggccoommpp(), rreeggeexxeecc(), rreeggssuubb(), and
  131.      rreeggeerrrroorr() were written at the University of Toronto and appeared in
  132.      4.3BSD-Tahoe. They are intended to be compatible with the Bell V8
  133.      regexp(3),  but are not derived from Bell code.
  134.  
  135. BBUUGGSS
  136.      Empty branches and empty regular expressions are not portable to V8.
  137.  
  138.      The restriction against applying `*' or `+' to a possibly­null operand is
  139.      an artifact of the simplistic implementation.
  140.  
  141.      Does not support egrep's  newline­separated branches; neither does the V8
  142.      regexp(3),  though.
  143.  
  144.      Due to emphasis on compactness and simplicity, it's not strikingly fast.
  145.      It does give special attention to handling simple cases quickly.
  146.  
  147. BSD Experimental                April 19, 1991                               3
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.