Home Man
Today's Posts

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:
Select Section of Man Page:
Select Man Page Repository:

Linux 2.6 - man page for pcrecompat (linux section 3)


       PCRE - Perl-compatible regular expressions


       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

       1.  PCRE  has  only  a subset of Perl's UTF-8 and Unicode support. Details of what it does
       have are given in the section on UTF-8 support in the main pcre page.

       2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits them,  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

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

       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 recursively or  as  "subroutines"  are  always  treated  as
       atomic  groups  in PCRE. This is like Python, but unlike Perl. There is a discussion of an
       example that explains this in more detail in the section  on  recursion	differences  from
       Perl in the pcrepattern page.

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

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

       12. Perl recognizes comments in some places that PCRE doesn't, for example, between the	(
       and ? at the start of a subpattern.

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

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

       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.

       (k) The alternative matching function (pcre_dfa_exec()) matches in a different way and  is
       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.


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


       Last updated: 31 October 2010
       Copyright (c) 1997-2010 University of Cambridge.


All times are GMT -4. The time now is 09:35 AM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
Show Password