home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / editor / elvis / regexp.doc < prev    next >
Text File  |  1994-01-30  |  8KB  |  265 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. _4.  _R_E_G_U_L_A_R _E_X_P_R_E_S_S_I_O_N_S
  8.  
  9.  
  10.      Elvis uses regular expressions for searching  and  sub-
  11. stututions.   A regular expression is a text string in which
  12. some characters have special meanings.  This  is  much  more
  13. powerful than simple text matching.
  14.  
  15. _S_y_n_t_a_x
  16.  
  17.      Elvis' regexp package  treats  the  following  one-  or
  18. two-character  strings  (called  meta-characters) in special
  19. ways:
  20.  
  21. \(_s_u_b_e_x_p_r_e_s_s_i_o_n\)
  22.         The \( and \) metacharacters  are  used  to  delimit
  23.         subexpressions.  When the regular expression matches
  24.         a particular chunk  of  text,  Elvis  will  remember
  25.         which  portion  of that chunk matched the _s_u_b_e_x_p_r_e_s_-
  26.         _s_i_o_n.  The :s/regexp/newtext/ command makes  use  of
  27.         this feature.
  28.  
  29. ^       The ^ metacharacter matches the beginning of a line.
  30.         If,  for  example,  you  wanted to find "foo" at the
  31.         beginning of a line, you would use a regular expres-
  32.         sion  such  as  /^foo/.  Note that ^ is only a meta-
  33.         character if it occurs at the beginning of a regular
  34.         expression; anyplace else, it is treated as a normal
  35.         character.
  36.  
  37. $       The $ metacharacter matches the end of a  line.   It
  38.         is only a metacharacter when it occurs at the end of
  39.         a regular expression; elsewhere, it is treated as  a
  40.         normal  character.  For example, the regular expres-
  41.         sion /$$/ will search for a dollar sign at  the  end
  42.         of a line.
  43.  
  44. \<      The \< metacharacter matches a zero-length string at
  45.         the beginning of a word.  A word is considered to be
  46.         a string of 1 or more letters and  digits.   A  word
  47.         can  begin  at the beginning of a line or after 1 or
  48.         more non-alphanumeric characters.
  49.  
  50. \>      The \> metacharacter matches a zero-length string at
  51.         the end of a word.  A word can end at the end of the
  52.         line or before 1 or  more  non-alphanumeric  charac-
  53.         ters.    For   example,  /\<end\>/  would  find  any
  54.         instance of the word "end",  but  would  ignore  any
  55.         instances  of  e-n-d  inside  another  word  such as
  56.         "calendar".
  57.  
  58. .       The . metacharacter matches any single character.
  59.  
  60. [_c_h_a_r_a_c_t_e_r-_l_i_s_t]
  61.  
  62.  
  63.  
  64.                        June 13, 1992
  65.  
  66.  
  67.  
  68.  
  69.  
  70. 4-2                 REGULAR EXPRESSIONS                  4-2
  71.  
  72.  
  73.         This  matches  any   single   character   from   the
  74.         _c_h_a_r_a_c_t_e_r-_l_i_s_t.   Inside the _c_h_a_r_a_c_t_e_r-_l_i_s_t, you can
  75.         denote a span of  characters  by  writing  only  the
  76.         first  and  last  characters,  with a hyphen between
  77.         them.  If the _c_h_a_r_a_c_t_e_r-_l_i_s_t  is  preceded  by  a  ^
  78.         character,  then  the  list  is  inverted -- it will
  79.         match character that _i_s_n'_t mentioned  in  the  list.
  80.         For  example, /[a-zA-Z]/ matches any letter, and /[^
  81.         ]/ matches anything other than a blank.
  82.  
  83. \{_n\}   This is a closure operator, which means that it  can
  84.         only be placed after something that matches a single
  85.         character.  It controls the number of times that the
  86.         single-character expression should be repeated.
  87.  
  88.         The \{_n\} operator, in particular,  means  that  the
  89.         preceding  expression  should  be repeated exactly _n
  90.         times.  For example, /^-\{80\}$/ matches a  line  of
  91.         eighty  hyphens, and /\<[a-zA-Z]\{4\}\>/ matches any
  92.         four-letter word.
  93.  
  94. \{_n,_m\} This is a closure  operator  which  means  that  the
  95.         preceding   single-character  expression  should  be
  96.         repeated between _n and _m times, inclusive.  If the _m
  97.         is  omitted  (but  the  comma  is present) then _m is
  98.         taken to be inifinity.  For example, /"[^"]\{3,5\}"/
  99.         matches  any  pair  of  quotes which contains three,
  100.         four, or five non-quote characters.
  101.  
  102. *       The * metacharacter  is  a  closure  operator  which
  103.         means that the preceding single-character expression
  104.         can  be  repeated  zero  or  more  times.    It   is
  105.         equivelent  to  \{0,\}.  For example, /.*/ matches a
  106.         whole line.
  107.  
  108. \+      The \+ metacharacter is  a  closure  operator  which
  109.         means that the preceding single-character expression
  110.         can be repeated one or more times.  It is equivelent
  111.         to \{1,\}.  For example, /.\+/ matches a whole line,
  112.         but only if the line contains at least  one  charac-
  113.         ter.  It doesn't match empty lines.
  114.  
  115. \?      The \? metacharacter is  a  closure  operator  which
  116.         indicates   that   the   preceding  single-character
  117.         expression is optional -- that is, that it can occur
  118.         0  or  1  times.   It is equivelent to \{0,1\}.  For
  119.         example, /no[ -]\?one/ matches "no  one",  "no-one",
  120.         or "noone".
  121.  
  122.      Anything else is treated as a  normal  character  which
  123. must  exactly  match a character from the scanned text.  The
  124. special strings may all be preceded by a backslash to  force
  125. them to be treated normally.
  126.  
  127.  
  128.  
  129.  
  130.                        June 13, 1992
  131.  
  132.  
  133.  
  134.  
  135.  
  136. 4-3                 REGULAR EXPRESSIONS                  4-3
  137.  
  138.  
  139. _S_u_b_s_t_i_t_u_t_i_o_n_s
  140.  
  141.      The :s command has at least two  arguments:  a  regular
  142. expression,  and  a  substitution  string.   The  text  that
  143. matched the regular expression is replaced by text which  is
  144. derived from the substitution string.
  145.  
  146.      Most characters in the substitution string  are  copied
  147. into the text literally but a few have special meaning:
  148.  
  149.        &     Insert a copy of the original text
  150.        ~     Insert a copy of the previous replacement text
  151.        \1    Insert a copy of that portion of the original text which
  152.              matched the first set of \( \) parentheses
  153.        \2-\9 Do the same for the second (etc.) pair of \( \)
  154.        \U    Convert all chars of any later & or \# to uppercase
  155.        \L    Convert all chars of any later & or \# to lowercase
  156.        \E    End the effect of \U or \L
  157.        \u    Convert the first char of the next & or \# to uppercase
  158.        \l    Convert the first char of the next & or \# to lowercase
  159.  
  160.  
  161.      These may be preceded by a backslash to force  them  to
  162. be treated normally.  If "nomagic" mode is in effect, then &
  163. and ~ will be treated normally, and you must write  them  as
  164. \& and \~ for them to have special meaning.
  165.  
  166. _O_p_t_i_o_n_s
  167.  
  168.      Elvis has two options  which  affect  the  way  regular
  169. expressions  are used.  These options may be examined or set
  170. via the :set command.
  171.  
  172.      The first option is  called  "[no]magic".   This  is  a
  173. boolean  option, and it is "magic" (TRUE) by default.  While
  174. in  magic  mode,  all  of  the  meta-characters  behave   as
  175. described above.  In nomagic mode, only ^ and $ retain their
  176. special meaning.
  177.  
  178.      The second option is called "[no]ignorecase".  This  is
  179. a  boolean  option,  and  it  is  "noignorecase"  (FALSE) by
  180. default.  While in ignorecase mode, the searching  mechanism
  181. will  not  distinguish  between  an uppercase letter and its
  182. lowercase form.  In noignorecase mode, uppercase and  lower-
  183. case are treated as being different.
  184.  
  185.      Also, the "[no]wrapscan" option affects searches.
  186.  
  187. _E_x_a_m_p_l_e_s
  188.  
  189.      This example changes every occurence  of  "utilize"  to
  190. "use":
  191.  
  192.           :%s/utilize/use/g
  193.  
  194.  
  195.  
  196.                        June 13, 1992
  197.  
  198.  
  199.  
  200.  
  201.  
  202. 4-4                 REGULAR EXPRESSIONS                  4-4
  203.  
  204.  
  205.      This example deletes all whitespace that occurs at  the
  206. end of a line anywhere in the file.  (The brackets contain a
  207. single space and a single tab.):
  208.  
  209.           :%s/[   ]\+$//
  210.  
  211.      This example converts the current line to uppercase:
  212.  
  213.           :s/.*/\U&/
  214.  
  215.      This example underlines  each  letter  in  the  current
  216. line,  by  changing it into an "underscore backspace letter"
  217. sequence.  (The ^H is entered as "control-V backspace".):
  218.  
  219.           :s/[a-zA-Z]/_^H&/g
  220.  
  221.      This example locates the last  colon  in  a  line,  and
  222. swaps  the  text  before  the  colon with the text after the
  223. colon.  The first \( \) pair is used to  delimit  the  stuff
  224. before  the  colon,  and  the  second pair delimit the stuff
  225. after.  In the substitution text, \1 and  \2  are  given  in
  226. reverse order to perform the swap:
  227.  
  228.           :s/\(.*\):\(.*\)/\2:\1/
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.                        June 13, 1992
  263.  
  264.  
  265.