Provided by: libpcre3-dev_8.31-2ubuntu2.3_amd64 bug

NAME

       PCRE - Perl-compatible regular expressions

DIFFERENCES BETWEEN PCRE AND PERL


       This  document  describes  the  differences  in the ways that PCRE and Perl handle regular
       expressions. The differences described here are with respect to  Perl  versions  5.10  and
       above.

       1.  PCRE  has  only  a  subset of Perl's Unicode support. Details of what it does have are
       given in the pcreunicode page.

       2. PCRE allows repeat quantifiers only on parenthesized assertions, but they do  not  mean
       what you might think. For example, (?!a){3} does not assert that the next three characters
       are not "a". It just asserts that the next character is not "a" three times (in principle:
       PCRE  optimizes  this  to  run the assertion just once). Perl allows repeat quantifiers on
       other assertions such as \b, but these do not seem to have any use.

       3. Capturing subpatterns that occur inside negative lookahead assertions are counted,  but
       their  entries in the offsets vector are never set. Perl sets its numerical variables from
       any such patterns that are matched before the assertion fails to match something  (thereby
       succeeding), but only if the negative lookahead assertion contains just one branch.

       4. Though binary zero characters are supported in the subject string, they are not allowed
       in a pattern string because it is passed as a normal C string,  terminated  by  zero.  The
       escape sequence \0 can be used in the pattern to represent a binary zero.

       5.  The  following  Perl  escape  sequences are not supported: \l, \u, \L, \U, and \N when
       followed by a character name or Unicode value. (\N on  its  own,  matching  a  non-newline
       character,  is supported.) In fact these are implemented by Perl's general string-handling
       and are not part of its pattern matching engine. If any of these are encountered by  PCRE,
       an error is generated by default. However, if the PCRE_JAVASCRIPT_COMPAT option is set, \U
       and \u are interpreted as JavaScript interprets them.

       6. The Perl escape sequences \p, \P, and \X are supported  only  if  PCRE  is  built  with
       Unicode  character  property support. The properties that can be tested with \p and \P are
       limited to the general category properties such as Lu and Nd, script names such  as  Greek
       or  Han,  and  the  derived  properties  Any  and L&. PCRE does support the Cs (surrogate)
       property, which Perl does not; the Perl documentation says "Because Perl  hides  the  need
       for  the user to understand the internal representation of Unicode characters, there is no
       need to implement the somewhat messy concept of surrogates."

       7. PCRE implements a simpler version of \X than Perl, which changed to make \X match  what
       Unicode  calls  an  "extended grapheme cluster". This is more complicated than an extended
       Unicode sequence, which is what PCRE matches.

       8. PCRE does support the \Q...\E escape for quoting substrings. Characters in between  are
       treated as literals. This is slightly different from Perl in that $ and @ are also handled
       as literals inside the quotes. In Perl, they cause variable interpolation (but  of  course
       PCRE does not have variables). Note the following examples:

           Pattern            PCRE matches      Perl matches

           \Qabc$xyz\E        abc$xyz           abc followed by the
                                                  contents of $xyz
           \Qabc\$xyz\E       abc\$xyz          abc\$xyz
           \Qabc\E\$\Qxyz\E   abc$xyz           abc$xyz

       The \Q...\E sequence is recognized both inside and outside character classes.

       9.  Fairly  obviously,  PCRE  does not support the (?{code}) and (??{code}) constructions.
       However, there is support for recursive patterns. This is not available in Perl  5.8,  but
       it  is  in  Perl  5.10. Also, the PCRE "callout" feature allows an external function to be
       called during pattern matching. See the pcrecallout documentation for details.

       10. Subpatterns that are called as subroutines (whether or  not  recursively)  are  always
       treated  as  atomic groups in PCRE. This is like Python, but unlike Perl.  Captured values
       that are set outside a subroutine call can be reference from inside in PCRE,  but  not  in
       Perl.  There is a discussion that explains these differences in more detail in the section
       on recursion differences from Perl in the pcrepattern page.

       11. If any of the backtracking control verbs are used in an assertion or in  a  subpattern
       that  is  called as a subroutine (whether or not recursively), their effect is confined to
       that subpattern; it does not extend to the surrounding pattern. This  is  not  always  the
       case  in  Perl.  In  particular,  if  (*THEN)  is  present  in a group that is called as a
       subroutine, its action is limited to that group, even if the group does not contain any  |
       characters.  There is one exception to this: the name from a *(MARK), (*PRUNE), or (*THEN)
       that is encountered in a successful  positive  assertion  is  passed  back  when  a  match
       succeeds  (compare  capturing  parentheses  in assertions). Note that such subpatterns are
       processed as anchored at the point where they are tested.

       12. There are some differences that are concerned with the settings  of  captured  strings
       when  part  of  a  pattern  is  repeated.  For example, matching "aba" against the pattern
       /^(a(b)?)+$/ in Perl leaves $2 unset, but in PCRE it is set to "b".

       13. PCRE's handling of duplicate subpattern numbers and duplicate subpattern names is  not
       as  general  as  Perl's.  This is a consequence of the fact the PCRE works internally just
       with numbers, using  an  external  table  to  translate  between  numbers  and  names.  In
       particular, a pattern such as (?|(?<a>A)|(?<b)B), where the two capturing parentheses have
       the same number but different names, is not supported, and  causes  an  error  at  compile
       time.  If  it  were  allowed,  it  would  not be possible to distinguish which parentheses
       matched, because both names map to capturing subpattern number 1. To avoid this  confusing
       situation, an error is given at compile time.

       14. Perl recognizes comments in some places that PCRE does not, for example, between the (
       and ? at the start of a subpattern. If the /x modifier is set,  Perl  allows  white  space
       between ( and ? but PCRE never does, even if the PCRE_EXTENDED option is set.

       15.  PCRE  provides  some extensions to the Perl regular expression facilities.  Perl 5.10
       includes new features that are not in earlier versions of Perl, some  of  which  (such  as
       named  parentheses)  have  been  in  PCRE for some time. This list is with respect to Perl
       5.10:

       (a) Although  lookbehind  assertions  in  PCRE  must  match  fixed  length  strings,  each
       alternative  branch of a lookbehind assertion can match a different length of string. Perl
       requires them all to have the same length.

       (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is  not  set,  the  $  meta-character
       matches only at the very end of the string.

       (c)  If  PCRE_EXTRA  is  set,  a backslash followed by a letter with no special meaning is
       faulted. Otherwise, like Perl, the backslash is quietly ignored.  (Perl  can  be  made  to
       issue a warning.)

       (d)  If  PCRE_UNGREEDY  is  set, the greediness of the repetition quantifiers is inverted,
       that is, by default they are not greedy, but if followed by a question mark they are.

       (e) PCRE_ANCHORED can be used at matching time to force a pattern to be tried only at  the
       first matching position in the subject string.

       (f)    The    PCRE_NOTBOL,    PCRE_NOTEOL,   PCRE_NOTEMPTY,   PCRE_NOTEMPTY_ATSTART,   and
       PCRE_NO_AUTO_CAPTURE options for pcre_exec() have no Perl equivalents.

       (g) The \R escape sequence can be restricted  to  match  only  CR,  LF,  or  CRLF  by  the
       PCRE_BSR_ANYCRLF option.

       (h) The callout facility is PCRE-specific.

       (i) The partial matching facility is PCRE-specific.

       (j)  Patterns compiled by PCRE can be saved and re-used at a later time, even on different
       hosts that have the other endianness. However, this  does  not  apply  to  optimized  data
       created by the just-in-time compiler.

       (k)  The alternative matching functions (pcre_dfa_exec() and pcre16_dfa_exec()) match in a
       different way and are not Perl-compatible.

       (l) PCRE recognizes some special sequences such as (*CR) at the start of  a  pattern  that
       set overall options that cannot be changed within the pattern.

AUTHOR


       Philip Hazel
       University Computing Service
       Cambridge CB2 3QH, England.

REVISION


       Last updated: 01 June 2012
       Copyright (c) 1997-2012 University of Cambridge.