home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 July / AMIGA_1996_7.BIN / ausgabe_7_96 / pd-programmierung / perl5_002bin.lha / man / catp / perlre.0 < prev    next >
Text File  |  1996-03-02  |  46KB  |  727 lines

  1.  
  2.  
  3.  
  4. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  5.  
  6.  
  7. NNNNAAAAMMMMEEEE
  8.        perlre - Perl regular expressions
  9.  
  10. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  11.        This page describes the syntax of regular expressions in
  12.        Perl.  For a description of how to actually _u_s_e regular
  13.        expressions in matching operations, plus various examples
  14.        of the same, see mmmm//////// and ssss//////////// in the _p_e_r_l_o_p manpage.
  15.  
  16.        The matching operations can have various modifiers, some
  17.        of which relate to the interpretation of the regular
  18.        expression inside.  These are:
  19.  
  20.            iiii   DDDDoooo ccccaaaasssseeee----iiiinnnnsssseeeennnnssssiiiittttiiiivvvveeee ppppaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg....
  21.            mmmm   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss mmmmuuuullllttttiiiipppplllleeee lllliiiinnnneeeessss....
  22.            ssss   TTTTrrrreeeeaaaatttt ssssttttrrrriiiinnnngggg aaaassss ssssiiiinnnngggglllleeee lllliiiinnnneeee....
  23.            xxxx   EEEExxxxtttteeeennnndddd yyyyoooouuuurrrr ppppaaaatttttttteeeerrrrnnnn''''ssss lllleeeeggggiiiibbbbiiiilllliiiittttyyyy wwwwiiiitttthhhh wwwwhhhhiiiitttteeeessssppppaaaacccceeee aaaannnndddd ccccoooommmmmmmmeeeennnnttttssss....
  24.  
  25.        These are usually written as "the ////xxxx modifier", even
  26.        though the delimiter in question might not actually be a
  27.        slash.  In fact, any of these modifiers may also be
  28.        embedded within the regular expression itself using the
  29.        new ((((????............)))) construct.  See below.
  30.  
  31.        The ////xxxx modifier itself needs a little more explanation.
  32.        It tells the regular expression parser to ignore
  33.        whitespace that is not backslashed or within a character
  34.        class.  You can use this to break up your regular
  35.        expression into (slightly) more readable parts.  The ####
  36.        character is also treated as a metacharacter introducing a
  37.        comment, just as in ordinary Perl code.  Taken together,
  38.        these features go a long way towards making Perl 5 a
  39.        readable language.  See the C comment deletion code in the
  40.        _p_e_r_l_o_p manpage.
  41.  
  42.        RRRReeeegggguuuullllaaaarrrr EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  43.  
  44.        The patterns used in pattern matching are regular
  45.        expressions such as those supplied in the Version 8 regexp
  46.        routines.  (In fact, the routines are derived (distantly)
  47.        from Henry Spencer's freely redistributable
  48.        reimplementation of the V8 routines.)  See the section on
  49.        _V_e_r_s_i_o_n _8 _R_e_g_u_l_a_r _E_x_p_r_e_s_s_i_o_n_s for details.
  50.  
  51.        In particular the following metacharacters have their
  52.        standard _e_g_r_e_p-ish meanings:
  53.  
  54.            \\\\   QQQQuuuuooootttteeee tttthhhheeee nnnneeeexxxxtttt mmmmeeeettttaaaacccchhhhaaaarrrraaaacccctttteeeerrrr
  55.            ^^^^   MMMMaaaattttcccchhhh tttthhhheeee bbbbeeeeggggiiiinnnnnnnniiiinnnngggg ooooffff tttthhhheeee lllliiiinnnneeee
  56.            ....   MMMMaaaattttcccchhhh aaaannnnyyyy cccchhhhaaaarrrraaaacccctttteeeerrrr ((((eeeexxxxcccceeeepppptttt nnnneeeewwwwlllliiiinnnneeee))))
  57.            $$$$   MMMMaaaattttcccchhhh tttthhhheeee eeeennnndddd ooooffff tttthhhheeee lllliiiinnnneeee ((((oooorrrr bbbbeeeeffffoooorrrreeee nnnneeeewwwwlllliiiinnnneeee aaaatttt tttthhhheeee eeeennnndddd))))
  58.            ||||   AAAAlllltttteeeerrrrnnnnaaaattttiiiioooonnnn
  59.            (((())))  GGGGrrrroooouuuuppppiiiinnnngggg
  60.            [[[[]]]]  CCCChhhhaaaarrrraaaacccctttteeeerrrr ccccllllaaaassssssss
  61.  
  62.  
  63.  
  64. 13/Feb/96                perl 5.002 with                        1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  71.  
  72.  
  73.        By default, the "^" character is guaranteed to match only
  74.        at the beginning of the string, the "$" character only at
  75.        the end (or before the newline at the end) and Perl does
  76.        certain optimizations with the assumption that the string
  77.        contains only one line.  Embedded newlines will not be
  78.        matched by "^" or "$".  You may, however, wish to treat a
  79.        string as a multi-line buffer, such that the "^" will
  80.        match after any newline within the string, and "$" will
  81.        match before any newline.  At the cost of a little more
  82.        overhead, you can do this by using the /m modifier on the
  83.        pattern match operator.  (Older programs did this by
  84.        setting $$$$****, but this practice is deprecated in Perl 5.)
  85.  
  86.        To facilitate multi-line substitutions, the "." character
  87.        never matches a newline unless you use the ////ssss modifier,
  88.        which tells Perl to pretend the string is a single
  89.        line--even if it isn't.  The ////ssss modifier also overrides
  90.        the setting of $$$$****, in case you have some (badly behaved)
  91.        older code that sets it in another module.
  92.  
  93.        The following standard quantifiers are recognized:
  94.  
  95.            ****      MMMMaaaattttcccchhhh 0000 oooorrrr mmmmoooorrrreeee ttttiiiimmmmeeeessss
  96.            ++++      MMMMaaaattttcccchhhh 1111 oooorrrr mmmmoooorrrreeee ttttiiiimmmmeeeessss
  97.            ????      MMMMaaaattttcccchhhh 1111 oooorrrr 0000 ttttiiiimmmmeeeessss
  98.            {{{{nnnn}}}}    MMMMaaaattttcccchhhh eeeexxxxaaaaccccttttllllyyyy nnnn ttttiiiimmmmeeeessss
  99.            {{{{nnnn,,,,}}}}   MMMMaaaattttcccchhhh aaaatttt lllleeeeaaaasssstttt nnnn ttttiiiimmmmeeeessss
  100.            {{{{nnnn,,,,mmmm}}}}  MMMMaaaattttcccchhhh aaaatttt lllleeeeaaaasssstttt nnnn bbbbuuuutttt nnnnooootttt mmmmoooorrrreeee tttthhhhaaaannnn mmmm ttttiiiimmmmeeeessss
  101.  
  102.        (If a curly bracket occurs in any other context, it is
  103.        treated as a regular character.)  The "*" modifier is
  104.        equivalent to {{{{0000,,,,}}}}, the "+" modifier to {{{{1111,,,,}}}}, and the "?"
  105.        modifier to {{{{0000,,,,1111}}}}.  n and m are limited to integral values
  106.        less than 65536.
  107.  
  108.        By default, a quantified subpattern is "greedy", that is,
  109.        it will match as many times as possible without causing
  110.        the rest pattern not to match.  The standard quantifiers
  111.        are all "greedy", in that they match as many occurrences
  112.        as possible (given a particular starting location) without
  113.        causing the pattern to fail.  If you want it to match the
  114.        minimum number of times possible, follow the quantifier
  115.        with a "?" after any of them.  Note that the meanings
  116.        don't change, just the "gravity":
  117.  
  118.            ****????     MMMMaaaattttcccchhhh 0000 oooorrrr mmmmoooorrrreeee ttttiiiimmmmeeeessss
  119.            ++++????     MMMMaaaattttcccchhhh 1111 oooorrrr mmmmoooorrrreeee ttttiiiimmmmeeeessss
  120.            ????????     MMMMaaaattttcccchhhh 0000 oooorrrr 1111 ttttiiiimmmmeeee
  121.            {{{{nnnn}}}}????   MMMMaaaattttcccchhhh eeeexxxxaaaaccccttttllllyyyy nnnn ttttiiiimmmmeeeessss
  122.            {{{{nnnn,,,,}}}}????  MMMMaaaattttcccchhhh aaaatttt lllleeeeaaaasssstttt nnnn ttttiiiimmmmeeeessss
  123.            {{{{nnnn,,,,mmmm}}}}???? MMMMaaaattttcccchhhh aaaatttt lllleeeeaaaasssstttt nnnn bbbbuuuutttt nnnnooootttt mmmmoooorrrreeee tttthhhhaaaannnn mmmm ttttiiiimmmmeeeessss
  124.  
  125.        Since patterns are processed as double quoted strings, the
  126.        following also work:
  127.  
  128.  
  129.  
  130. 13/Feb/96                perl 5.002 with                        2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  137.  
  138.  
  139.            \\\\tttt          ttttaaaabbbb
  140.            \\\\nnnn          nnnneeeewwwwlllliiiinnnneeee
  141.            \\\\rrrr          rrrreeeettttuuuurrrrnnnn
  142.            \\\\ffff          ffffoooorrrrmmmm ffffeeeeeeeedddd
  143.            \\\\aaaa          aaaallllaaaarrrrmmmm ((((bbbbeeeellllllll))))
  144.            \\\\eeee          eeeessssccccaaaappppeeee ((((tttthhhhiiiinnnnkkkk ttttrrrrooooffffffff))))
  145.            \\\\000033333333        ooooccccttttaaaallll cccchhhhaaaarrrr ((((tttthhhhiiiinnnnkkkk ooooffff aaaa PPPPDDDDPPPP----11111111))))
  146.            \\\\xxxx1111BBBB        hhhheeeexxxx cccchhhhaaaarrrr
  147.            \\\\cccc[[[[         ccccoooonnnnttttrrrroooollll cccchhhhaaaarrrr
  148.            \\\\llll          lllloooowwwweeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr ((((tttthhhhiiiinnnnkkkk vvvviiii))))
  149.            \\\\uuuu          uuuuppppppppeeeerrrrccccaaaasssseeee nnnneeeexxxxtttt cccchhhhaaaarrrr ((((tttthhhhiiiinnnnkkkk vvvviiii))))
  150.            \\\\LLLL          lllloooowwwweeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE ((((tttthhhhiiiinnnnkkkk vvvviiii))))
  151.            \\\\UUUU          uuuuppppppppeeeerrrrccccaaaasssseeee ttttiiiillllllll \\\\EEEE ((((tttthhhhiiiinnnnkkkk vvvviiii))))
  152.            \\\\EEEE          eeeennnndddd ccccaaaasssseeee mmmmooooddddiiiiffffiiiiccccaaaattttiiiioooonnnn ((((tttthhhhiiiinnnnkkkk vvvviiii))))
  153.            \\\\QQQQ          qqqquuuuooootttteeee rrrreeeeggggeeeexxxxpppp mmmmeeeettttaaaacccchhhhaaaarrrraaaacccctttteeeerrrrssss ttttiiiillllllll \\\\EEEE
  154.  
  155.        In addition, Perl defines the following:
  156.  
  157.            \\\\wwww  MMMMaaaattttcccchhhh aaaa """"wwwwoooorrrrdddd"""" cccchhhhaaaarrrraaaacccctttteeeerrrr ((((aaaallllpppphhhhaaaannnnuuuummmmeeeerrrriiiicccc pppplllluuuussss """"____""""))))
  158.            \\\\WWWW  MMMMaaaattttcccchhhh aaaa nnnnoooonnnn----wwwwoooorrrrdddd cccchhhhaaaarrrraaaacccctttteeeerrrr
  159.            \\\\ssss  MMMMaaaattttcccchhhh aaaa wwwwhhhhiiiitttteeeessssppppaaaacccceeee cccchhhhaaaarrrraaaacccctttteeeerrrr
  160.            \\\\SSSS  MMMMaaaattttcccchhhh aaaa nnnnoooonnnn----wwwwhhhhiiiitttteeeessssppppaaaacccceeee cccchhhhaaaarrrraaaacccctttteeeerrrr
  161.            \\\\dddd  MMMMaaaattttcccchhhh aaaa ddddiiiiggggiiiitttt cccchhhhaaaarrrraaaacccctttteeeerrrr
  162.            \\\\DDDD  MMMMaaaattttcccchhhh aaaa nnnnoooonnnn----ddddiiiiggggiiiitttt cccchhhhaaaarrrraaaacccctttteeeerrrr
  163.  
  164.        Note that \\\\wwww matches a single alphanumeric character, not
  165.        a whole word.  To match a word you'd need to say \\\\wwww++++.  You
  166.        may use \\\\wwww, \\\\WWWW, \\\\ssss, \\\\SSSS, \\\\dddd and \\\\DDDD within character classes
  167.        (though not as either end of a range).
  168.  
  169.        Perl defines the following zero-width assertions:
  170.  
  171.            \\\\bbbb  MMMMaaaattttcccchhhh aaaa wwwwoooorrrrdddd bbbboooouuuunnnnddddaaaarrrryyyy
  172.            \\\\BBBB  MMMMaaaattttcccchhhh aaaa nnnnoooonnnn----((((wwwwoooorrrrdddd bbbboooouuuunnnnddddaaaarrrryyyy))))
  173.            \\\\AAAA  MMMMaaaattttcccchhhh oooonnnnllllyyyy aaaatttt bbbbeeeeggggiiiinnnnnnnniiiinnnngggg ooooffff ssssttttrrrriiiinnnngggg
  174.            \\\\ZZZZ  MMMMaaaattttcccchhhh oooonnnnllllyyyy aaaatttt eeeennnndddd ooooffff ssssttttrrrriiiinnnngggg ((((oooorrrr bbbbeeeeffffoooorrrreeee nnnneeeewwwwlllliiiinnnneeee aaaatttt tttthhhheeee eeeennnndddd))))
  175.            \\\\GGGG  MMMMaaaattttcccchhhh oooonnnnllllyyyy wwwwhhhheeeerrrreeee pppprrrreeeevvvviiiioooouuuussss mmmm////////gggg lllleeeefffftttt ooooffffffff
  176.  
  177.        A word boundary (\\\\bbbb) is defined as a spot between two
  178.        characters that has a \\\\wwww on one side of it and and a \\\\WWWW on
  179.        the other side of it (in either order), counting the
  180.        imaginary characters off the beginning and end of the
  181.        string as matching a \\\\WWWW.  (Within character classes \\\\bbbb
  182.        represents backspace rather than a word boundary.)  The \\\\AAAA
  183.        and \\\\ZZZZ are just like "^" and "$" except that they won't
  184.        match multiple times when the ////mmmm modifier is used, while
  185.        "^" and "$" will match at every internal line boundary.
  186.        To match the actual end of the string, not ignoring
  187.        newline, you can use \\\\ZZZZ((((????!!!!\\\\nnnn)))).
  188.  
  189.        When the bracketing construct (((( ............ )))) is used, \<digit>
  190.        matches the digit'th substring.  Outside of the pattern,
  191.        always use "$" instead of "\" in front of the digit.  (The
  192.        \<digit> notation can on rare occasion work outside the
  193.  
  194.  
  195.  
  196. 13/Feb/96                perl 5.002 with                        3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  203.  
  204.  
  205.        current pattern, this should not be relied upon.  See the
  206.        WARNING below.) The scope of $<digit> (and $$$$````, $$$$&&&&, and $$$$''''))))
  207.        extends to the end of the enclosing BLOCK or eval string,
  208.        or to the next successful pattern match, whichever comes
  209.        first.  If you want to use parentheses to delimit
  210.        subpattern (e.g. a set of alternatives) without saving it
  211.        as a subpattern, follow the ( with a ?.
  212.  
  213.        You may have as many parentheses as you wish.  If you have
  214.        more than 9 substrings, the variables $$$$11110000, $$$$11111111, ... refer
  215.        to the corresponding substring.  Within the pattern, \10,
  216.        \11, etc. refer back to substrings if there have been at
  217.        least that many left parens before the backreference.
  218.        Otherwise (for backward compatibility) \10 is the same as
  219.        \010, a backspace, and \11 the same as \011, a tab.  And
  220.        so on.  (\1 through \9 are always backreferences.)
  221.  
  222.        $$$$++++ returns whatever the last bracket match matched.  $$$$&&&&
  223.        returns the entire matched string.  ($0 used to return the
  224.        same thing, but not any more.)  $$$$```` returns everything
  225.        before the matched string.  $$$$'''' returns everything after
  226.        the matched string.  Examples:
  227.  
  228.            ssss////^^^^(((([[[[^^^^ ]]]]****)))) ****(((([[[[^^^^ ]]]]****))))////$$$$2222 $$$$1111////;;;;     #### sssswwwwaaaapppp ffffiiiirrrrsssstttt ttttwwwwoooo wwwwoooorrrrddddssss
  229.  
  230.            iiiiffff ((((////TTTTiiiimmmmeeee:::: ((((........))))::::((((........))))::::((((........))))////)))) {{{{
  231.                $$$$hhhhoooouuuurrrrssss ==== $$$$1111;;;;
  232.                $$$$mmmmiiiinnnnuuuutttteeeessss ==== $$$$2222;;;;
  233.                $$$$sssseeeeccccoooonnnnddddssss ==== $$$$3333;;;;
  234.            }}}}
  235.  
  236.        You will note that all backslashed metacharacters in Perl
  237.        are alphanumeric, such as \\\\bbbb, \\\\wwww, \\\\nnnn.  Unlike some other
  238.        regular expression languages, there are no backslashed
  239.        symbols that aren't alphanumeric.  So anything that looks
  240.        like \\, \(, \), \<, \>, \{, or \} is always interpreted
  241.        as a literal character, not a metacharacter.  This makes
  242.        it simple to quote a string that you want to use for a
  243.        pattern but that you are afraid might contain
  244.        metacharacters.  Simply quote all the non-alphanumeric
  245.        characters:
  246.  
  247.            $$$$ppppaaaatttttttteeeerrrrnnnn ====~~~~ ssss////((((\\\\WWWW))))////\\\\\\\\$$$$1111////gggg;;;;
  248.  
  249.        You can also use the built-in _q_u_o_t_e_m_e_t_a_(_) function to do
  250.        this.  An even easier way to quote metacharacters right in
  251.        the match operator is to say
  252.  
  253.            ////$$$$uuuunnnnqqqquuuuooootttteeeedddd\\\\QQQQ$$$$qqqquuuuooootttteeeedddd\\\\EEEE$$$$uuuunnnnqqqquuuuooootttteeeedddd////
  254.  
  255.        Perl 5 defines a consistent extension syntax for regular
  256.        expressions.  The syntax is a pair of parens with a
  257.        question mark as the first thing within the parens (this
  258.        was a syntax error in Perl 4).  The character after the
  259.  
  260.  
  261.  
  262. 13/Feb/96                perl 5.002 with                        4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  269.  
  270.  
  271.        question mark gives the function of the extension.
  272.        Several extensions are already supported:
  273.  
  274.        (?#text)  A comment.  The text is ignored.  If the ////xxxx
  275.                  switch is used to enable whitespace formatting,
  276.                  a simple #### will suffice.
  277.  
  278.        (?:regexp)
  279.                  This groups things like "()" but doesn't make
  280.                  backrefences like "()" does.  So
  281.  
  282.                      sssspppplllliiiitttt((((////\\\\bbbb((((????::::aaaa||||bbbb||||cccc))))\\\\bbbb////))))
  283.  
  284.                  is like
  285.  
  286.                      sssspppplllliiiitttt((((////\\\\bbbb((((aaaa||||bbbb||||cccc))))\\\\bbbb////))))
  287.  
  288.                  but doesn't spit out extra fields.
  289.  
  290.        (?=regexp)
  291.                  A zero-width positive lookahead assertion.  For
  292.                  example, ////\\\\wwww++++((((????====\\\\tttt))))//// matches a word followed by
  293.                  a tab, without including the tab in $$$$&&&&.
  294.  
  295.        (?!regexp)
  296.                  A zero-width negative lookahead assertion.  For
  297.                  example ////ffffoooooooo((((????!!!!bbbbaaaarrrr))))//// matches any occurrence of
  298.                  "foo" that isn't followed by "bar".  Note
  299.                  however that lookahead and lookbehind are NOT
  300.                  the same thing.  You cannot use this for
  301.                  lookbehind: ////((((????!!!!ffffoooooooo))))bbbbaaaarrrr//// will not find an
  302.                  occurrence of "bar" that is preceded by
  303.                  something which is not "foo".  That's because
  304.                  the ((((????!!!!ffffoooooooo)))) is just saying that the next thing
  305.                  cannot be "foo"--and it's not, it's a "bar", so
  306.                  "foobar" will match.  You would have to do
  307.                  something like ////((((????ffffoooooooo))))............bbbbaaaarrrr//// for that.   We say
  308.                  "like" because there's the case of your "bar"
  309.                  not having three characters before it.  You
  310.                  could cover that this way:
  311.                  ////((((????::::((((????!!!!ffffoooooooo))))............||||^^^^........????))))bbbbaaaarrrr////.  Sometimes it's still
  312.                  easier just to say:
  313.  
  314.                      iiiiffff ((((////ffffoooooooo//// &&&&&&&& $$$$```` ====~~~~ ////bbbbaaaarrrr$$$$////))))
  315.  
  316.  
  317.        (?imsx)   One or more embedded pattern-match modifiers.
  318.                  This is particularly useful for patterns that
  319.                  are specified in a table somewhere, some of
  320.                  which want to be case sensitive, and some of
  321.                  which don't.  The case insensitive ones merely
  322.                  need to include ((((????iiii)))) at the front of the
  323.                  pattern.  For example:
  324.  
  325.  
  326.  
  327.  
  328. 13/Feb/96                perl 5.002 with                        5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  335.  
  336.  
  337.                      $$$$ppppaaaatttttttteeeerrrrnnnn ==== """"ffffoooooooobbbbaaaarrrr"""";;;;
  338.                      iiiiffff (((( ////$$$$ppppaaaatttttttteeeerrrrnnnn////iiii ))))
  339.  
  340.                      #### mmmmoooorrrreeee fffflllleeeexxxxiiiibbbblllleeee::::
  341.  
  342.                      $$$$ppppaaaatttttttteeeerrrrnnnn ==== """"((((????iiii))))ffffoooooooobbbbaaaarrrr"""";;;;
  343.                      iiiiffff (((( ////$$$$ppppaaaatttttttteeeerrrrnnnn//// ))))
  344.  
  345.  
  346.        The specific choice of question mark for this and the new
  347.        minimal matching construct was because 1) question mark is
  348.        pretty rare in older regular expressions, and 2) whenever
  349.        you see one, you should stop and "question" exactly what
  350.        is going on.  That's psychology...
  351.  
  352.        BBBBaaaacccckkkkttttrrrraaaacccckkkkiiiinnnngggg
  353.  
  354.        A fundamental feature of regular expression matching
  355.        involves the notion called _b_a_c_k_t_r_a_c_k_i_n_g.  which is used
  356.        (when needed) by all regular expression quantifiers,
  357.        namely ****, ****????, ++++, ++++????, {{{{nnnn,,,,mmmm}}}}, and {{{{nnnn,,,,mmmm}}}}????.
  358.  
  359.        For a regular expression to match, the _e_n_t_i_r_e regular
  360.        expression must match, not just part of it.  So if the
  361.        beginning of a pattern containing a quantifier succeeds in
  362.        a way that causes later parts in the pattern to fail, the
  363.        matching engine backs up and recalculates the beginning
  364.        part--that's why it's called backtracking.
  365.  
  366.        Here is an example of backtracking:  Let's say you want to
  367.        find the word following "foo" in the string "Food is on
  368.        the foo table.":
  369.  
  370.            $$$$____ ==== """"FFFFoooooooodddd iiiissss oooonnnn tttthhhheeee ffffoooooooo ttttaaaabbbblllleeee...."""";;;;
  371.            iiiiffff (((( ////\\\\bbbb((((ffffoooooooo))))\\\\ssss++++((((\\\\wwww++++))))////iiii )))) {{{{
  372.                pppprrrriiiinnnntttt """"$$$$2222 ffffoooolllllllloooowwwwssss $$$$1111....\\\\nnnn"""";;;;
  373.            }}}}
  374.  
  375.        When the match runs, the first part of the regular
  376.        expression (\\\\bbbb((((ffffoooooooo))))) finds a possible match right at the
  377.        beginning of the string, and loads up $$$$1111 with "Foo".
  378.        However, as soon as the matching engine sees that there's
  379.        no whitespace following the "Foo" that it had saved in $$$$1111,
  380.        it realizes its mistake and starts over again one
  381.        character after where it had had the tentative match.
  382.        This time it goes all the way until the next occurrence of
  383.        "foo". The complete regular expression matches this time,
  384.        and you get the expected output of "table follows foo."
  385.  
  386.        Sometimes minimal matching can help a lot.  Imagine you'd
  387.        like to match everything between "foo" and "bar".
  388.        Initially, you write something like this:
  389.  
  390.  
  391.  
  392.  
  393.  
  394. 13/Feb/96                perl 5.002 with                        6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  401.  
  402.  
  403.            $$$$____ ====  """"TTTThhhheeee ffffoooooooodddd iiiissss uuuunnnnddddeeeerrrr tttthhhheeee bbbbaaaarrrr iiiinnnn tttthhhheeee bbbbaaaarrrrnnnn...."""";;;;
  404.            iiiiffff (((( ////ffffoooooooo((((....****))))bbbbaaaarrrr//// )))) {{{{
  405.                pppprrrriiiinnnntttt """"ggggooootttt <<<<$$$$1111>>>>\\\\nnnn"""";;;;
  406.            }}}}
  407.  
  408.        Which perhaps unexpectedly yields:
  409.  
  410.          ggggooootttt <<<<dddd iiiissss uuuunnnnddddeeeerrrr tttthhhheeee bbbbaaaarrrr iiiinnnn tttthhhheeee >>>>
  411.  
  412.        That's because ....**** was greedy, so you get everything
  413.        between the _f_i_r_s_t "foo" and the _l_a_s_t "bar".  In this case,
  414.        it's more effective to use minimal matching to make sure
  415.        you get the text between a "foo" and the first "bar"
  416.        thereafter.
  417.  
  418.            iiiiffff (((( ////ffffoooooooo((((....****????))))bbbbaaaarrrr//// )))) {{{{ pppprrrriiiinnnntttt """"ggggooootttt <<<<$$$$1111>>>>\\\\nnnn"""" }}}}
  419.          ggggooootttt <<<<dddd iiiissss uuuunnnnddddeeeerrrr tttthhhheeee >>>>
  420.  
  421.        Here's another example: let's say you'd like to match a
  422.        number at the end of a string, and you also want to keep
  423.        the preceding part the match.  So you write this:
  424.  
  425.            $$$$____ ==== """"IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: 55553333111144447777"""";;;;
  426.            iiiiffff (((( ////((((....****))))((((\\\\dddd****))))//// )))) {{{{                                #### WWWWrrrroooonnnngggg!!!!
  427.                pppprrrriiiinnnntttt """"BBBBeeeeggggiiiinnnnnnnniiiinnnngggg iiiissss <<<<$$$$1111>>>>,,,, nnnnuuuummmmbbbbeeeerrrr iiiissss <<<<$$$$2222>>>>....\\\\nnnn"""";;;;
  428.            }}}}
  429.  
  430.        That won't work at all, because ....**** was greedy and gobbled
  431.        up the whole string. As \\\\dddd**** can match on an empty string
  432.        the complete regular expression matched successfully.
  433.  
  434.            BBBBeeeeggggiiiinnnnnnnniiiinnnngggg iiiissss <<<<IIII hhhhaaaavvvveeee 2222:::: 55553333111144447777>>>>,,,, nnnnuuuummmmbbbbeeeerrrr iiiissss <<<<>>>>....
  435.  
  436.        Here are some variants, most of which don't work:
  437.  
  438.            $$$$____ ==== """"IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: 55553333111144447777"""";;;;
  439.            @@@@ppppaaaattttssss ==== qqqqwwww{{{{
  440.                ((((....****))))((((\\\\dddd****))))
  441.                ((((....****))))((((\\\\dddd++++))))
  442.                ((((....****????))))((((\\\\dddd****))))
  443.                ((((....****????))))((((\\\\dddd++++))))
  444.                ((((....****))))((((\\\\dddd++++))))$$$$
  445.                ((((....****????))))((((\\\\dddd++++))))$$$$
  446.                ((((....****))))\\\\bbbb((((\\\\dddd++++))))$$$$
  447.                ((((....****\\\\DDDD))))((((\\\\dddd++++))))$$$$
  448.            }}}};;;;
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460. 13/Feb/96                perl 5.002 with                        7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  467.  
  468.  
  469.            ffffoooorrrr $$$$ppppaaaatttt ((((@@@@ppppaaaattttssss)))) {{{{
  470.                pppprrrriiiinnnnttttffff """"%%%%----11112222ssss """",,,, $$$$ppppaaaatttt;;;;
  471.                iiiiffff (((( ////$$$$ppppaaaatttt//// )))) {{{{
  472.                    pppprrrriiiinnnntttt """"<<<<$$$$1111>>>> <<<<$$$$2222>>>>\\\\nnnn"""";;;;
  473.                }}}} eeeellllsssseeee {{{{
  474.                    pppprrrriiiinnnntttt """"FFFFAAAAIIIILLLL\\\\nnnn"""";;;;
  475.                }}}}
  476.            }}}}
  477.  
  478.        That will print out:
  479.  
  480.            ((((....****))))((((\\\\dddd****))))    <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: 55553333111144447777>>>> <<<<>>>>
  481.            ((((....****))))((((\\\\dddd++++))))    <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: 5555333311114444>>>> <<<<7777>>>>
  482.            ((((....****????))))((((\\\\dddd****))))   <<<<>>>> <<<<>>>>
  483.            ((((....****????))))((((\\\\dddd++++))))   <<<<IIII hhhhaaaavvvveeee >>>> <<<<2222>>>>
  484.            ((((....****))))((((\\\\dddd++++))))$$$$   <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: 5555333311114444>>>> <<<<7777>>>>
  485.            ((((....****????))))((((\\\\dddd++++))))$$$$  <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: >>>> <<<<55553333111144447777>>>>
  486.            ((((....****))))\\\\bbbb((((\\\\dddd++++))))$$$$ <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: >>>> <<<<55553333111144447777>>>>
  487.            ((((....****\\\\DDDD))))((((\\\\dddd++++))))$$$$ <<<<IIII hhhhaaaavvvveeee 2222 nnnnuuuummmmbbbbeeeerrrrssss:::: >>>> <<<<55553333111144447777>>>>
  488.  
  489.        As you see, this can be a bit tricky.  It's important to
  490.        realize that a regular expression is merely a set of
  491.        assertions that gives a definition of success.  There may
  492.        be 0, 1, or several different ways that the definition
  493.        might succeed against a particular string.  And if there
  494.        are multiple ways it might succeed, you need to understand
  495.        backtracking in order to know which variety of success you
  496.        will achieve.
  497.  
  498.        When using lookahead assertions and negations, this can
  499.        all get even tricker.  Imagine you'd like to find a
  500.        sequence of nondigits not followed by "123".  You might
  501.        try to write that as
  502.  
  503.                $$$$____ ==== """"AAAABBBBCCCC111122223333"""";;;;
  504.                iiiiffff (((( ////^^^^\\\\DDDD****((((????!!!!111122223333))))//// )))) {{{{                          #### WWWWrrrroooonnnngggg!!!!
  505.                    pppprrrriiiinnnntttt """"YYYYuuuupppp,,,, nnnnoooo 111122223333 iiiinnnn $$$$____\\\\nnnn"""";;;;
  506.                }}}}
  507.  
  508.        But that isn't going to match; at least, not the way
  509.        you're hoping.  It claims that there is no 123 in the
  510.        string.  Here's a clearer picture of why it that pattern
  511.        matches, contrary to popular expectations:
  512.  
  513.            $$$$xxxx ==== ''''AAAABBBBCCCC111122223333'''' ;;;;
  514.            $$$$yyyy ==== ''''AAAABBBBCCCC444444445555'''' ;;;;
  515.  
  516.            pppprrrriiiinnnntttt """"1111:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$xxxx ====~~~~ ////^^^^((((AAAABBBBCCCC))))((((????!!!!111122223333))))//// ;;;;
  517.            pppprrrriiiinnnntttt """"2222:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$yyyy ====~~~~ ////^^^^((((AAAABBBBCCCC))))((((????!!!!111122223333))))//// ;;;;
  518.  
  519.            pppprrrriiiinnnntttt """"3333:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$xxxx ====~~~~ ////^^^^((((\\\\DDDD****))))((((????!!!!111122223333))))//// ;;;;
  520.            pppprrrriiiinnnntttt """"4444:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$yyyy ====~~~~ ////^^^^((((\\\\DDDD****))))((((????!!!!111122223333))))//// ;;;;
  521.  
  522.        This prints
  523.  
  524.  
  525.  
  526. 13/Feb/96                perl 5.002 with                        8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  533.  
  534.  
  535.            2222:::: ggggooootttt AAAABBBBCCCC
  536.            3333:::: ggggooootttt AAAABBBB
  537.            4444:::: ggggooootttt AAAABBBBCCCC
  538.  
  539.        You might have expected test 3 to fail because it just
  540.        seems to a more general purpose version of test 1.  The
  541.        important difference between them is that test 3 contains
  542.        a quantifier (\\\\DDDD****) and so can use backtracking, whereas
  543.        test 1 will not.  What's happening is that you've asked
  544.        "Is it true that at the start of $$$$xxxx, following 0 or more
  545.        nondigits, you have something that's not 123?"  If the
  546.        pattern matcher had let \\\\DDDD**** expand to "ABC", this would
  547.        have caused the whole pattern to fail.  The search engine
  548.        will initially match \\\\DDDD**** with "ABC".  Then it will try to
  549.        match ((((????!!!!111122223333 with "123" which, of course, fails.  But
  550.        because a quantifier (\\\\DDDD****) has been used in the regular
  551.        expression, the search engine can backtrack and retry the
  552.        match differently in the hope of matching the complete
  553.        regular expression.
  554.  
  555.        Well now, the pattern really, _r_e_a_l_l_y wants to succeed, so
  556.        it uses the standard regexp backoff-and-retry and lets \\\\DDDD****
  557.        expand to just "AB" this time.  Now there's indeed
  558.        something following "AB" that is not "123".  It's in fact
  559.        "C123", which suffices.
  560.  
  561.        We can deal with this by using both an assertion and a
  562.        negation.  We'll say that the first part in $$$$1111 must be
  563.        followed by a digit, and in fact, it must also be followed
  564.        by something that's not "123".  Remember that the
  565.        lookaheads are zero-width expressions--they only look, but
  566.        don't consume any of the string in their match.  So
  567.        rewriting this way produces what you'd expect; that is,
  568.        case 5 will fail, but case 6 succeeds:
  569.  
  570.            pppprrrriiiinnnntttt """"5555:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$xxxx ====~~~~ ////^^^^((((\\\\DDDD****))))((((????====\\\\dddd))))((((????!!!!111122223333))))//// ;;;;
  571.            pppprrrriiiinnnntttt """"6666:::: ggggooootttt $$$$1111\\\\nnnn"""" iiiiffff $$$$yyyy ====~~~~ ////^^^^((((\\\\DDDD****))))((((????====\\\\dddd))))((((????!!!!111122223333))))//// ;;;;
  572.  
  573.            6666:::: ggggooootttt AAAABBBBCCCC
  574.  
  575.        In other words, the two zero-width assertions next to each
  576.        other work like they're ANDed together, just as you'd use
  577.        any builtin assertions:  ////^^^^$$$$//// matches only if you're at
  578.        the beginning of the line AND the end of the line
  579.        simultaneously.  The deeper underlying truth is that
  580.        juxtaposition in regular expressions always means AND,
  581.        except when you write an explicit OR using the vertical
  582.        bar.  ////aaaabbbb//// means match "a" AND (then) match "b", although
  583.        the attempted matches are made at different positions
  584.        because "a" is not a zero-width assertion, but a one-width
  585.        assertion.
  586.  
  587.        One warning: particularly complicated regular expressions
  588.        can take exponential time to solve due to the immense
  589.  
  590.  
  591.  
  592. 13/Feb/96                perl 5.002 with                        9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  599.  
  600.  
  601.        number of possible ways they can use backtracking to try
  602.        match.  For example this will take a very long time to run
  603.  
  604.            ////((((((((aaaa{{{{0000,,,,5555}}}})))){{{{0000,,,,5555}}}})))){{{{0000,,,,5555}}}}////
  605.  
  606.        And if you used ****'s instead of limiting it to 0 through 5
  607.        matches, then it would take literally forever--or until
  608.        you ran out of stack space.
  609.  
  610.        VVVVeeeerrrrssssiiiioooonnnn 8888 RRRReeeegggguuuullllaaaarrrr EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  611.  
  612.        In case you're not familiar with the "regular" Version 8
  613.        regexp routines, here are the pattern-matching rules not
  614.        described above.
  615.  
  616.        Any single character matches itself, unless it is a
  617.        _m_e_t_a_c_h_a_r_a_c_t_e_r with a special meaning described here or
  618.        above.  You can cause characters which normally function
  619.        as metacharacters to be interpreted literally by prefixing
  620.        them with a "\" (e.g. "\." matches a ".", not any
  621.        character; "\\" matches a "\").  A series of characters
  622.        matches that series of characters in the target string, so
  623.        the pattern bbbblllluuuurrrrffffllll would match "blurfl" in the target
  624.        string.
  625.  
  626.        You can specify a character class, by enclosing a list of
  627.        characters in [[[[]]]], which will match any one of the
  628.        characters in the list.  If the first character after the
  629.        "[" is "^", the class matches any character not in the
  630.        list.  Within a list, the "-" character is used to specify
  631.        a range, so that aaaa----zzzz represents all the characters between
  632.        "a" and "z", inclusive.
  633.  
  634.        Characters may be specified using a metacharacter syntax
  635.        much like that used in C: "\n" matches a newline, "\t" a
  636.        tab, "\r" a carriage return, "\f" a form feed, etc.  More
  637.        generally, \_n_n_n, where _n_n_n is a string of octal digits,
  638.        matches the character whose ASCII value is _n_n_n.
  639.        Similarly, \x_n_n, where _n_n are hexidecimal digits, matches
  640.        the character whose ASCII value is _n_n. The expression \c_x
  641.        matches the ASCII character control-_x.  Finally, the "."
  642.        metacharacter matches any character except "\n" (unless
  643.        you use ////ssss).
  644.  
  645.        You can specify a series of alternatives for a pattern
  646.        using "|" to separate them, so that ffffeeeeeeee||||ffffiiiieeee||||ffffooooeeee will match
  647.        any of "fee", "fie", or "foe" in the target string (as
  648.        would ffff((((eeee||||iiii||||oooo))))eeee).  Note that the first alternative
  649.        includes everything from the last pattern delimiter ("(",
  650.        "[", or the beginning of the pattern) up to the first "|",
  651.        and the last alternative contains everything from the last
  652.        "|" to the next pattern delimiter.  For this reason, it's
  653.        common practice to include alternatives in parentheses, to
  654.        minimize confusion about where they start and end.  Note
  655.  
  656.  
  657.  
  658. 13/Feb/96                perl 5.002 with                       10
  659.  
  660.  
  661.  
  662.  
  663.  
  664. PERLRE(1)      User Contributed Perl Documentation      PERLRE(1)
  665.  
  666.  
  667.        however that "|" is interpreted as a literal with square
  668.        brackets, so if you write [[[[ffffeeeeeeee||||ffffiiiieeee||||ffffooooeeee]]]] you're really only
  669.        matching [[[[ffffeeeeiiiioooo||||]]]].
  670.  
  671.        Within a pattern, you may designate subpatterns for later
  672.        reference by enclosing them in parentheses, and you may
  673.        refer back to the _nth subpattern later in the pattern
  674.        using the metacharacter \_n.  Subpatterns are numbered
  675.        based on the left to right order of their opening
  676.        parenthesis.  Note that a backreference matches whatever
  677.        actually matched the subpattern in the string being
  678.        examined, not the rules for that subpattern.  Therefore,
  679.        ((((0000||||0000xxxx))))\\\\dddd****\\\\ssss\\\\1111\\\\dddd**** will match "0x1234 0x4321",but not
  680.        "0x1234 01234", since subpattern 1 actually matched "0x",
  681.        even though the rule 0000||||0000xxxx could potentially match the
  682.        leading 0 in the second number.
  683.  
  684.        WWWWAAAARRRRNNNNIIIINNNNGGGG oooonnnn \\\\1111 vvvvssss $$$$1111
  685.  
  686.        Some people get too used to writing things like
  687.  
  688.            $$$$ppppaaaatttttttteeeerrrrnnnn ====~~~~ ssss////((((\\\\WWWW))))////\\\\\\\\\\\\1111////gggg;;;;
  689.  
  690.        This is grandfathered for the RHS of a substitute to avoid
  691.        shocking the sssseeeedddd addicts, but it's a dirty habit to get
  692.        into.  That's because in PerlThink, the right-hand side of
  693.        a ssss//////////// is a double-quoted string.  \\\\1111 in the usual double-
  694.        quoted string means a control-A.  The customary Unix
  695.        meaning of \\\\1111 is kludged in for ssss////////////.  However, if you get
  696.        into the habit of doing that, you get yourself into
  697.        trouble if you then add an ////eeee modifier.
  698.  
  699.            ssss////((((\\\\dddd++++))))//// \\\\1111 ++++ 1111 ////eeeegggg;;;;
  700.  
  701.        Or if you try to do
  702.  
  703.            ssss////((((\\\\dddd++++))))////\\\\1111000000000000////;;;;
  704.  
  705.        You can't disambiguate that by saying \\\\{{{{1111}}}}000000000000, whereas you
  706.        can fix it with $$$${{{{1111}}}}000000000000.  Basically, the operation of
  707.        interpolation should not be confused with the operation of
  708.        matching a backreference.  Certainly they mean two
  709.        different things on the _l_e_f_t side of the ssss////////////.
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724. 13/Feb/96                perl 5.002 with                       11
  725.  
  726.  
  727.