1PCRECOMPAT(3) Library Functions Manual PCRECOMPAT(3)
2
3
4
6 PCRE - Perl-compatible regular expressions
7
9
10 This document describes the differences in the ways that PCRE and Perl
11 handle regular expressions. The differences described here are with
12 respect to Perl versions 5.10 and above.
13
14 1. PCRE has only a subset of Perl's Unicode support. Details of what it
15 does have are given in the pcreunicode page.
16
17 2. PCRE allows repeat quantifiers only on parenthesized assertions, but
18 they do not mean what you might think. For example, (?!a){3} does not
19 assert that the next three characters are not "a". It just asserts that
20 the next character is not "a" three times (in principle: PCRE optimizes
21 this to run the assertion just once). Perl allows repeat quantifiers on
22 other assertions such as \b, but these do not seem to have any use.
23
24 3. Capturing subpatterns that occur inside negative lookahead asser‐
25 tions are counted, but their entries in the offsets vector are never
26 set. Perl sometimes (but not always) sets its numerical variables from
27 inside negative assertions.
28
29 4. Though binary zero characters are supported in the subject string,
30 they are not allowed in a pattern string because it is passed as a nor‐
31 mal C string, terminated by zero. The escape sequence \0 can be used in
32 the pattern to represent a binary zero.
33
34 5. The following Perl escape sequences are not supported: \l, \u, \L,
35 \U, and \N when followed by a character name or Unicode value. (\N on
36 its own, matching a non-newline character, is supported.) In fact these
37 are implemented by Perl's general string-handling and are not part of
38 its pattern matching engine. If any of these are encountered by PCRE,
39 an error is generated by default. However, if the PCRE_JAVASCRIPT_COM‐
40 PAT option is set, \U and \u are interpreted as JavaScript interprets
41 them.
42
43 6. The Perl escape sequences \p, \P, and \X are supported only if PCRE
44 is built with Unicode character property support. The properties that
45 can be tested with \p and \P are limited to the general category prop‐
46 erties such as Lu and Nd, script names such as Greek or Han, and the
47 derived properties Any and L&. PCRE does support the Cs (surrogate)
48 property, which Perl does not; the Perl documentation says "Because
49 Perl hides the need for the user to understand the internal representa‐
50 tion of Unicode characters, there is no need to implement the somewhat
51 messy concept of surrogates."
52
53 7. PCRE does support the \Q...\E escape for quoting substrings. Charac‐
54 ters in between are treated as literals. This is slightly different
55 from Perl in that $ and @ are also handled as literals inside the
56 quotes. In Perl, they cause variable interpolation (but of course PCRE
57 does not have variables). Note the following examples:
58
59 Pattern PCRE matches Perl matches
60
61 \Qabc$xyz\E abc$xyz abc followed by the
62 contents of $xyz
63 \Qabc\$xyz\E abc\$xyz abc\$xyz
64 \Qabc\E\$\Qxyz\E abc$xyz abc$xyz
65
66 The \Q...\E sequence is recognized both inside and outside character
67 classes.
68
69 8. Fairly obviously, PCRE does not support the (?{code}) and (??{code})
70 constructions. However, there is support for recursive patterns. This
71 is not available in Perl 5.8, but it is in Perl 5.10. Also, the PCRE
72 "callout" feature allows an external function to be called during pat‐
73 tern matching. See the pcrecallout documentation for details.
74
75 9. Subpatterns that are called as subroutines (whether or not recur‐
76 sively) are always treated as atomic groups in PCRE. This is like
77 Python, but unlike Perl. Captured values that are set outside a sub‐
78 routine call can be reference from inside in PCRE, but not in Perl.
79 There is a discussion that explains these differences in more detail in
80 the section on recursion differences from Perl in the pcrepattern page.
81
82 10. If any of the backtracking control verbs are used in a subpattern
83 that is called as a subroutine (whether or not recursively), their
84 effect is confined to that subpattern; it does not extend to the sur‐
85 rounding pattern. This is not always the case in Perl. In particular,
86 if (*THEN) is present in a group that is called as a subroutine, its
87 action is limited to that group, even if the group does not contain any
88 | characters. Note that such subpatterns are processed as anchored at
89 the point where they are tested.
90
91 11. If a pattern contains more than one backtracking control verb, the
92 first one that is backtracked onto acts. For example, in the pattern
93 A(*COMMIT)B(*PRUNE)C a failure in B triggers (*COMMIT), but a failure
94 in C triggers (*PRUNE). Perl's behaviour is more complex; in many cases
95 it is the same as PCRE, but there are examples where it differs.
96
97 12. Most backtracking verbs in assertions have their normal actions.
98 They are not confined to the assertion.
99
100 13. There are some differences that are concerned with the settings of
101 captured strings when part of a pattern is repeated. For example,
102 matching "aba" against the pattern /^(a(b)?)+$/ in Perl leaves $2
103 unset, but in PCRE it is set to "b".
104
105 14. PCRE's handling of duplicate subpattern numbers and duplicate sub‐
106 pattern names is not as general as Perl's. This is a consequence of the
107 fact the PCRE works internally just with numbers, using an external ta‐
108 ble to translate between numbers and names. In particular, a pattern
109 such as (?|(?<a>A)|(?<b>B), where the two capturing parentheses have
110 the same number but different names, is not supported, and causes an
111 error at compile time. If it were allowed, it would not be possible to
112 distinguish which parentheses matched, because both names map to cap‐
113 turing subpattern number 1. To avoid this confusing situation, an error
114 is given at compile time.
115
116 15. Perl recognizes comments in some places that PCRE does not, for
117 example, between the ( and ? at the start of a subpattern. If the /x
118 modifier is set, Perl allows white space between ( and ? (though cur‐
119 rent Perls warn that this is deprecated) but PCRE never does, even if
120 the PCRE_EXTENDED option is set.
121
122 16. Perl, when in warning mode, gives warnings for character classes
123 such as [A-\d] or [a-[:digit:]]. It then treats the hyphens as liter‐
124 als. PCRE has no warning features, so it gives an error in these cases
125 because they are almost certainly user mistakes.
126
127 17. In PCRE, the upper/lower case character properties Lu and Ll are
128 not affected when case-independent matching is specified. For example,
129 \p{Lu} always matches an upper case letter. I think Perl has changed in
130 this respect; in the release at the time of writing (5.16), \p{Lu} and
131 \p{Ll} match all letters, regardless of case, when case independence is
132 specified.
133
134 18. PCRE provides some extensions to the Perl regular expression facil‐
135 ities. Perl 5.10 includes new features that are not in earlier ver‐
136 sions of Perl, some of which (such as named parentheses) have been in
137 PCRE for some time. This list is with respect to Perl 5.10:
138
139 (a) Although lookbehind assertions in PCRE must match fixed length
140 strings, each alternative branch of a lookbehind assertion can match a
141 different length of string. Perl requires them all to have the same
142 length.
143
144 (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $
145 meta-character matches only at the very end of the string.
146
147 (c) If PCRE_EXTRA is set, a backslash followed by a letter with no spe‐
148 cial meaning is faulted. Otherwise, like Perl, the backslash is quietly
149 ignored. (Perl can be made to issue a warning.)
150
151 (d) If PCRE_UNGREEDY is set, the greediness of the repetition quanti‐
152 fiers is inverted, that is, by default they are not greedy, but if fol‐
153 lowed by a question mark they are.
154
155 (e) PCRE_ANCHORED can be used at matching time to force a pattern to be
156 tried only at the first matching position in the subject string.
157
158 (f) The PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NOTEMPTY_ATSTART,
159 and PCRE_NO_AUTO_CAPTURE options for pcre_exec() have no Perl equiva‐
160 lents.
161
162 (g) The \R escape sequence can be restricted to match only CR, LF, or
163 CRLF by the PCRE_BSR_ANYCRLF option.
164
165 (h) The callout facility is PCRE-specific.
166
167 (i) The partial matching facility is PCRE-specific.
168
169 (j) Patterns compiled by PCRE can be saved and re-used at a later time,
170 even on different hosts that have the other endianness. However, this
171 does not apply to optimized data created by the just-in-time compiler.
172
173 (k) The alternative matching functions (pcre_dfa_exec(),
174 pcre16_dfa_exec() and pcre32_dfa_exec(),) match in a different way and
175 are not Perl-compatible.
176
177 (l) PCRE recognizes some special sequences such as (*CR) at the start
178 of a pattern that set overall options that cannot be changed within the
179 pattern.
180
182
183 Philip Hazel
184 University Computing Service
185 Cambridge CB2 3QH, England.
186
188
189 Last updated: 10 November 2013
190 Copyright (c) 1997-2013 University of Cambridge.
191
192
193
194PCRE 8.34 10 November 2013 PCRECOMPAT(3)