PCRECOMPAT(3) - phpMan

Command: man perldoc info search(apropos)  


PCRECOMPAT(3)                        Library Functions Manual                       PCRECOMPAT(3)



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 fol-
       lowed by a character name or Unicode value. (\N on its own, matching a non-newline charac-
       ter,  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  Uni-
       code character property support. The properties that can be tested with \p and \P are lim-
       ited 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 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.

       8.  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.

       9. 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.

       10. 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 subrou-
       tine, its action is limited to that group, even if the group does not contain any |  char-
       acters. 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.

       11. 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".

       12. 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  particu-
       lar,  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  situa-
       tion, an error is given at compile time.

       13. 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.

       14.  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  alterna-
       tive  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  cre-
       ated by the just-in-time compiler.

       (k)   The   alternative   matching   functions   (pcre_dfa_exec(),  pcre16_dfa_exec()  and
       pcre32_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: 25 August 2012
       Copyright (c) 1997-2012 University of Cambridge.



PCRE 8.30                                  24 June 2012                             PCRECOMPAT(3)

Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache
Under GNU General Public License
2024-04-19 02:23 @3.145.131.28 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0!Valid CSS!