| 15 |
<ul> |
<ul> |
| 16 |
<li><a name="TOC1" href="#SEC1">INTRODUCTION</a> |
<li><a name="TOC1" href="#SEC1">INTRODUCTION</a> |
| 17 |
<li><a name="TOC2" href="#SEC2">USER DOCUMENTATION</a> |
<li><a name="TOC2" href="#SEC2">USER DOCUMENTATION</a> |
| 18 |
<li><a name="TOC3" href="#SEC3">LIMITATIONS</a> |
<li><a name="TOC3" href="#SEC3">AUTHOR</a> |
| 19 |
<li><a name="TOC4" href="#SEC4">UTF-8 AND UNICODE PROPERTY SUPPORT</a> |
<li><a name="TOC4" href="#SEC4">REVISION</a> |
|
<li><a name="TOC5" href="#SEC5">AUTHOR</a> |
|
|
<li><a name="TOC6" href="#SEC6">REVISION</a> |
|
| 20 |
</ul> |
</ul> |
| 21 |
<br><a name="SEC1" href="#TOC1">INTRODUCTION</a><br> |
<br><a name="SEC1" href="#TOC1">INTRODUCTION</a><br> |
| 22 |
<P> |
<P> |
| 98 |
pcrecpp details of the C++ wrapper |
pcrecpp details of the C++ wrapper |
| 99 |
pcredemo a demonstration C program that uses PCRE |
pcredemo a demonstration C program that uses PCRE |
| 100 |
pcregrep description of the <b>pcregrep</b> command |
pcregrep description of the <b>pcregrep</b> command |
| 101 |
|
pcrejit discussion of the just-in-time optimization support |
| 102 |
|
pcrelimits details of size and other limits |
| 103 |
pcrematching discussion of the two matching algorithms |
pcrematching discussion of the two matching algorithms |
| 104 |
pcrepartial details of the partial matching facility |
pcrepartial details of the partial matching facility |
| 105 |
pcrepattern syntax and semantics of supported regular expressions |
pcrepattern syntax and semantics of supported regular expressions |
| 110 |
pcrestack discussion of stack usage |
pcrestack discussion of stack usage |
| 111 |
pcresyntax quick syntax reference |
pcresyntax quick syntax reference |
| 112 |
pcretest description of the <b>pcretest</b> testing command |
pcretest description of the <b>pcretest</b> testing command |
| 113 |
|
pcreunicode discussion of Unicode and UTF-8 support |
| 114 |
</pre> |
</pre> |
| 115 |
In addition, in the "man" and HTML formats, there is a short page for each |
In addition, in the "man" and HTML formats, there is a short page for each |
| 116 |
C library function, listing its arguments and results. |
C library function, listing its arguments and results. |
| 117 |
</P> |
</P> |
| 118 |
<br><a name="SEC3" href="#TOC1">LIMITATIONS</a><br> |
<br><a name="SEC3" href="#TOC1">AUTHOR</a><br> |
|
<P> |
|
|
There are some size limitations in PCRE but it is hoped that they will never in |
|
|
practice be relevant. |
|
|
</P> |
|
|
<P> |
|
|
The maximum length of a compiled pattern is 65539 (sic) bytes if PCRE is |
|
|
compiled with the default internal linkage size of 2. If you want to process |
|
|
regular expressions that are truly enormous, you can compile PCRE with an |
|
|
internal linkage size of 3 or 4 (see the <b>README</b> file in the source |
|
|
distribution and the |
|
|
<a href="pcrebuild.html"><b>pcrebuild</b></a> |
|
|
documentation for details). In these cases the limit is substantially larger. |
|
|
However, the speed of execution is slower. |
|
|
</P> |
|
|
<P> |
|
|
All values in repeating quantifiers must be less than 65536. |
|
|
</P> |
|
|
<P> |
|
|
There is no limit to the number of parenthesized subpatterns, but there can be |
|
|
no more than 65535 capturing subpatterns. |
|
|
</P> |
|
|
<P> |
|
|
The maximum length of name for a named subpattern is 32 characters, and the |
|
|
maximum number of named subpatterns is 10000. |
|
|
</P> |
|
|
<P> |
|
|
The maximum length of a subject string is the largest positive number that an |
|
|
integer variable can hold. However, when using the traditional matching |
|
|
function, PCRE uses recursion to handle subpatterns and indefinite repetition. |
|
|
This means that the available stack space may limit the size of a subject |
|
|
string that can be processed by certain patterns. For a discussion of stack |
|
|
issues, see the |
|
|
<a href="pcrestack.html"><b>pcrestack</b></a> |
|
|
documentation. |
|
|
<a name="utf8support"></a></P> |
|
|
<br><a name="SEC4" href="#TOC1">UTF-8 AND UNICODE PROPERTY SUPPORT</a><br> |
|
|
<P> |
|
|
From release 3.3, PCRE has had some support for character strings encoded in |
|
|
the UTF-8 format. For release 4.0 this was greatly extended to cover most |
|
|
common requirements, and in release 5.0 additional support for Unicode general |
|
|
category properties was added. |
|
|
</P> |
|
|
<P> |
|
|
In order process UTF-8 strings, you must build PCRE to include UTF-8 support in |
|
|
the code, and, in addition, you must call |
|
|
<a href="pcre_compile.html"><b>pcre_compile()</b></a> |
|
|
with the PCRE_UTF8 option flag, or the pattern must start with the sequence |
|
|
(*UTF8). When either of these is the case, both the pattern and any subject |
|
|
strings that are matched against it are treated as UTF-8 strings instead of |
|
|
strings of 1-byte characters. |
|
|
</P> |
|
|
<P> |
|
|
If you compile PCRE with UTF-8 support, but do not use it at run time, the |
|
|
library will be a bit bigger, but the additional run time overhead is limited |
|
|
to testing the PCRE_UTF8 flag occasionally, so should not be very big. |
|
|
</P> |
|
|
<P> |
|
|
If PCRE is built with Unicode character property support (which implies UTF-8 |
|
|
support), the escape sequences \p{..}, \P{..}, and \X are supported. |
|
|
The available properties that can be tested are limited to the general |
|
|
category properties such as Lu for an upper case letter or Nd for a decimal |
|
|
number, the Unicode script names such as Arabic or Han, and the derived |
|
|
properties Any and L&. A full list is given in the |
|
|
<a href="pcrepattern.html"><b>pcrepattern</b></a> |
|
|
documentation. Only the short names for properties are supported. For example, |
|
|
\p{L} matches a letter. Its Perl synonym, \p{Letter}, is not supported. |
|
|
Furthermore, in Perl, many properties may optionally be prefixed by "Is", for |
|
|
compatibility with Perl 5.6. PCRE does not support this. |
|
|
<a name="utf8strings"></a></P> |
|
|
<br><b> |
|
|
Validity of UTF-8 strings |
|
|
</b><br> |
|
|
<P> |
|
|
When you set the PCRE_UTF8 flag, the strings passed as patterns and subjects |
|
|
are (by default) checked for validity on entry to the relevant functions. From |
|
|
release 7.3 of PCRE, the check is according the rules of RFC 3629, which are |
|
|
themselves derived from the Unicode specification. Earlier releases of PCRE |
|
|
followed the rules of RFC 2279, which allows the full range of 31-bit values (0 |
|
|
to 0x7FFFFFFF). The current check allows only values in the range U+0 to |
|
|
U+10FFFF, excluding U+D800 to U+DFFF. |
|
|
</P> |
|
|
<P> |
|
|
The excluded code points are the "Low Surrogate Area" of Unicode, of which the |
|
|
Unicode Standard says this: "The Low Surrogate Area does not contain any |
|
|
character assignments, consequently no character code charts or namelists are |
|
|
provided for this area. Surrogates are reserved for use with UTF-16 and then |
|
|
must be used in pairs." The code points that are encoded by UTF-16 pairs are |
|
|
available as independent code points in the UTF-8 encoding. (In other words, |
|
|
the whole surrogate thing is a fudge for UTF-16 which unfortunately messes up |
|
|
UTF-8.) |
|
|
</P> |
|
|
<P> |
|
|
If an invalid UTF-8 string is passed to PCRE, an error return is given. At |
|
|
compile time, the only additional information is the offset to the first byte |
|
|
of the failing character. The runtime functions (<b>pcre_exec()</b> and |
|
|
<b>pcre_dfa_exec()</b>), pass back this information as well as a more detailed |
|
|
reason code if the caller has provided memory in which to do this. |
|
|
</P> |
|
|
<P> |
|
|
In some situations, you may already know that your strings are valid, and |
|
|
therefore want to skip these checks in order to improve performance. If you set |
|
|
the PCRE_NO_UTF8_CHECK flag at compile time or at run time, PCRE assumes that |
|
|
the pattern or subject it is given (respectively) contains only valid UTF-8 |
|
|
codes. In this case, it does not diagnose an invalid UTF-8 string. |
|
|
</P> |
|
|
<P> |
|
|
If you pass an invalid UTF-8 string when PCRE_NO_UTF8_CHECK is set, what |
|
|
happens depends on why the string is invalid. If the string conforms to the |
|
|
"old" definition of UTF-8 (RFC 2279), it is processed as a string of characters |
|
|
in the range 0 to 0x7FFFFFFF. In other words, apart from the initial validity |
|
|
test, PCRE (when in UTF-8 mode) handles strings according to the more liberal |
|
|
rules of RFC 2279. However, if the string does not even conform to RFC 2279, |
|
|
the result is undefined. Your program may crash. |
|
|
</P> |
|
|
<P> |
|
|
If you want to process strings of values in the full range 0 to 0x7FFFFFFF, |
|
|
encoded in a UTF-8-like manner as per the old RFC, you can set |
|
|
PCRE_NO_UTF8_CHECK to bypass the more restrictive test. However, in this |
|
|
situation, you will have to apply your own validity check. |
|
|
</P> |
|
|
<br><b> |
|
|
General comments about UTF-8 mode |
|
|
</b><br> |
|
|
<P> |
|
|
1. An unbraced hexadecimal escape sequence (such as \xb3) matches a two-byte |
|
|
UTF-8 character if the value is greater than 127. |
|
|
</P> |
|
|
<P> |
|
|
2. Octal numbers up to \777 are recognized, and match two-byte UTF-8 |
|
|
characters for values greater than \177. |
|
|
</P> |
|
|
<P> |
|
|
3. Repeat quantifiers apply to complete UTF-8 characters, not to individual |
|
|
bytes, for example: \x{100}{3}. |
|
|
</P> |
|
|
<P> |
|
|
4. The dot metacharacter matches one UTF-8 character instead of a single byte. |
|
|
</P> |
|
|
<P> |
|
|
5. The escape sequence \C can be used to match a single byte in UTF-8 mode, |
|
|
but its use can lead to some strange effects. This facility is not available in |
|
|
the alternative matching function, <b>pcre_dfa_exec()</b>. |
|
|
</P> |
|
|
<P> |
|
|
6. The character escapes \b, \B, \d, \D, \s, \S, \w, and \W correctly |
|
|
test characters of any code value, but, by default, the characters that PCRE |
|
|
recognizes as digits, spaces, or word characters remain the same set as before, |
|
|
all with values less than 256. This remains true even when PCRE is built to |
|
|
include Unicode property support, because to do otherwise would slow down PCRE |
|
|
in many common cases. Note in particular that this applies to \b and \B, |
|
|
because they are defined in terms of \w and \W. If you really want to test |
|
|
for a wider sense of, say, "digit", you can use explicit Unicode property tests |
|
|
such as \p{Nd}. Alternatively, if you set the PCRE_UCP option, the way that |
|
|
the character escapes work is changed so that Unicode properties are used to |
|
|
determine which characters match. There are more details in the section on |
|
|
<a href="pcrepattern.html#genericchartypes">generic character types</a> |
|
|
in the |
|
|
<a href="pcrepattern.html"><b>pcrepattern</b></a> |
|
|
documentation. |
|
|
</P> |
|
|
<P> |
|
|
7. Similarly, characters that match the POSIX named character classes are all |
|
|
low-valued characters, unless the PCRE_UCP option is set. |
|
|
</P> |
|
|
<P> |
|
|
8. However, the horizontal and vertical whitespace matching escapes (\h, \H, |
|
|
\v, and \V) do match all the appropriate Unicode characters, whether or not |
|
|
PCRE_UCP is set. |
|
|
</P> |
|
|
<P> |
|
|
9. Case-insensitive matching applies only to characters whose values are less |
|
|
than 128, unless PCRE is built with Unicode property support. Even when Unicode |
|
|
property support is available, PCRE still uses its own character tables when |
|
|
checking the case of low-valued characters, so as not to degrade performance. |
|
|
The Unicode property information is used only for characters with higher |
|
|
values. Furthermore, PCRE supports case-insensitive matching only when there is |
|
|
a one-to-one mapping between a letter's cases. There are a small number of |
|
|
many-to-one mappings in Unicode; these are not supported by PCRE. |
|
|
</P> |
|
|
<br><a name="SEC5" href="#TOC1">AUTHOR</a><br> |
|
| 119 |
<P> |
<P> |
| 120 |
Philip Hazel |
Philip Hazel |
| 121 |
<br> |
<br> |
| 129 |
taken it away. If you want to email me, use my two initials, followed by the |
taken it away. If you want to email me, use my two initials, followed by the |
| 130 |
two digits 10, at the domain cam.ac.uk. |
two digits 10, at the domain cam.ac.uk. |
| 131 |
</P> |
</P> |
| 132 |
<br><a name="SEC6" href="#TOC1">REVISION</a><br> |
<br><a name="SEC4" href="#TOC1">REVISION</a><br> |
| 133 |
<P> |
<P> |
| 134 |
Last updated: 07 May 2011 |
Last updated: 24 August 2011 |
| 135 |
<br> |
<br> |
| 136 |
Copyright © 1997-2011 University of Cambridge. |
Copyright © 1997-2011 University of Cambridge. |
| 137 |
<br> |
<br> |