mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-09 21:14:02 +00:00
update to pcre 7.9
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13706 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -1,4 +1,10 @@
|
||||
<html>
|
||||
<!-- This is a manually maintained file that is the root of the HTML version of
|
||||
the PCRE documentation. When the HTML documents are built from the man
|
||||
page versions, the entire doc/html directory is emptied, this file is then
|
||||
copied into doc/html/index.html, and the remaining files therein are
|
||||
created by the 132html script.
|
||||
-->
|
||||
<head>
|
||||
<title>PCRE specification</title>
|
||||
</head>
|
||||
@@ -12,6 +18,9 @@ The HTML documentation for PCRE comprises the following pages:
|
||||
<tr><td><a href="pcre.html">pcre</a></td>
|
||||
<td> Introductory page</td></tr>
|
||||
|
||||
<tr><td><a href="pcre-config.html">pcre-config</a></td>
|
||||
<td> Information about the installation configuration</td></tr>
|
||||
|
||||
<tr><td><a href="pcreapi.html">pcreapi</a></td>
|
||||
<td> PCRE's native API</td></tr>
|
||||
|
||||
@@ -54,6 +63,9 @@ The HTML documentation for PCRE comprises the following pages:
|
||||
<tr><td><a href="pcrestack.html">pcrestack</a></td>
|
||||
<td> Discussion of PCRE's stack usage</td></tr>
|
||||
|
||||
<tr><td><a href="pcresyntax.html">pcresyntax</a></td>
|
||||
<td> Syntax quick-reference summary</td></tr>
|
||||
|
||||
<tr><td><a href="pcretest.html">pcretest</a></td>
|
||||
<td> The <b>pcretest</b> command for testing PCRE</td></tr>
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>pcre-config specification</title>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" text="#00005A" link="#0066FF" alink="#3399FF" vlink="#2222BB">
|
||||
<h1>pcre-config man page</h1>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
<p>
|
||||
This page is part of the PCRE HTML documentation. It was generated automatically
|
||||
from the original man page. If there is any nonsense in it, please consult the
|
||||
man page, in case the conversion went wrong.
|
||||
<br>
|
||||
<ul>
|
||||
<li><a name="TOC1" href="#SEC1">SYNOPSIS</a>
|
||||
<li><a name="TOC2" href="#SEC2">DESCRIPTION</a>
|
||||
<li><a name="TOC3" href="#SEC3">OPTIONS</a>
|
||||
<li><a name="TOC4" href="#SEC4">SEE ALSO</a>
|
||||
<li><a name="TOC5" href="#SEC5">AUTHOR</a>
|
||||
<li><a name="TOC6" href="#SEC6">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SYNOPSIS</a><br>
|
||||
<P>
|
||||
<b>pcre-config [--prefix] [--exec-prefix] [--version] [--libs]</b>
|
||||
<b>[--libs-posix] [--cflags] [--cflags-posix]</b>
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">DESCRIPTION</a><br>
|
||||
<P>
|
||||
<b>pcre-config</b> returns the configuration of the installed PCRE
|
||||
libraries and the options required to compile a program to use them.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">OPTIONS</a><br>
|
||||
<P>
|
||||
<b>--prefix</b>
|
||||
Writes the directory prefix used in the PCRE installation for architecture
|
||||
independent files (<i>/usr</i> on many systems, <i>/usr/local</i> on some
|
||||
systems) to the standard output.
|
||||
</P>
|
||||
<P>
|
||||
<b>--exec-prefix</b>
|
||||
Writes the directory prefix used in the PCRE installation for architecture
|
||||
dependent files (normally the same as <b>--prefix</b>) to the standard output.
|
||||
</P>
|
||||
<P>
|
||||
<b>--version</b>
|
||||
Writes the version number of the installed PCRE libraries to the standard
|
||||
output.
|
||||
</P>
|
||||
<P>
|
||||
<b>--libs</b>
|
||||
Writes to the standard output the command line options required to link
|
||||
with PCRE (<b>-lpcre</b> on many systems).
|
||||
</P>
|
||||
<P>
|
||||
<b>--libs-posix</b>
|
||||
Writes to the standard output the command line options required to link with
|
||||
the PCRE posix emulation library (<b>-lpcreposix</b> <b>-lpcre</b> on many
|
||||
systems).
|
||||
</P>
|
||||
<P>
|
||||
<b>--cflags</b>
|
||||
Writes to the standard output the command line options required to compile
|
||||
files that use PCRE (this may include some <b>-I</b> options, but is blank on
|
||||
many systems).
|
||||
</P>
|
||||
<P>
|
||||
<b>--cflags-posix</b>
|
||||
Writes to the standard output the command line options required to compile
|
||||
files that use the PCRE posix emulation library (this may include some <b>-I</b>
|
||||
options, but is blank on many systems).
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
<b>pcre(3)</b>
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
This manual page was originally written by Mark Baker for the Debian GNU/Linux
|
||||
system. It has been slightly revised as a generic PCRE man page.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 18 April 2007
|
||||
<br>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
@@ -18,18 +18,26 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC3" href="#SEC3">LIMITATIONS</a>
|
||||
<li><a name="TOC4" href="#SEC4">UTF-8 AND UNICODE PROPERTY SUPPORT</a>
|
||||
<li><a name="TOC5" href="#SEC5">AUTHOR</a>
|
||||
<li><a name="TOC6" href="#SEC6">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">INTRODUCTION</a><br>
|
||||
<P>
|
||||
The PCRE library is a set of functions that implement regular expression
|
||||
pattern matching using the same syntax and semantics as Perl, with just a few
|
||||
differences. The current implementation of PCRE (release 6.x) corresponds
|
||||
approximately with Perl 5.8, including support for UTF-8 encoded strings and
|
||||
Unicode general category properties. However, this support has to be explicitly
|
||||
enabled; it is not the default.
|
||||
differences. Certain features that appeared in Python and PCRE before they
|
||||
appeared in Perl are also available using the Python syntax. There is also some
|
||||
support for certain .NET and Oniguruma syntax items, and there is an option for
|
||||
requesting some minor changes that give better JavaScript compatibility.
|
||||
</P>
|
||||
<P>
|
||||
In addition to the Perl-compatible matching function, PCRE also contains an
|
||||
The current implementation of PCRE (release 7.x) corresponds approximately with
|
||||
Perl 5.10, including support for UTF-8 encoded strings and Unicode general
|
||||
category properties. However, UTF-8 and Unicode support has to be explicitly
|
||||
enabled; it is not the default. The Unicode tables correspond to Unicode
|
||||
release 5.1.
|
||||
</P>
|
||||
<P>
|
||||
In addition to the Perl-compatible matching function, PCRE contains an
|
||||
alternative matching function that matches the same compiled patterns in a
|
||||
different way. In certain circumstances, the alternative function has some
|
||||
advantages. For a discussion of the two matching algorithms, see the
|
||||
@@ -52,7 +60,9 @@ supported by PCRE are given in separate documents. See the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
and
|
||||
<a href="pcrecompat.html"><b>pcrecompat</b></a>
|
||||
pages.
|
||||
pages. There is a syntax summary in the
|
||||
<a href="pcresyntax.html"><b>pcresyntax</b></a>
|
||||
page.
|
||||
</P>
|
||||
<P>
|
||||
Some features of PCRE can be included, excluded, or changed when the library is
|
||||
@@ -82,6 +92,7 @@ all the sections are concatenated, for ease of searching. The sections are as
|
||||
follows:
|
||||
<pre>
|
||||
pcre this document
|
||||
pcre-config show PCRE installation configuration information
|
||||
pcreapi details of PCRE's native C API
|
||||
pcrebuild options for building PCRE
|
||||
pcrecallout details of the callout feature
|
||||
@@ -91,6 +102,7 @@ follows:
|
||||
pcrematching discussion of the two matching algorithms
|
||||
pcrepartial details of the partial matching facility
|
||||
pcrepattern syntax and semantics of supported regular expressions
|
||||
pcresyntax quick syntax reference
|
||||
pcreperform discussion of performance issues
|
||||
pcreposix the POSIX-compatible C API
|
||||
pcreprecompile details of saving and re-using precompiled patterns
|
||||
@@ -114,21 +126,18 @@ 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 will be slower.
|
||||
However, the speed of execution is slower.
|
||||
</P>
|
||||
<P>
|
||||
All values in repeating quantifiers must be less than 65536. The maximum
|
||||
compiled length of subpattern with an explicit repeat count is 30000 bytes. The
|
||||
maximum number of capturing subpatterns is 65535.
|
||||
All values in repeating quantifiers must be less than 65536.
|
||||
</P>
|
||||
<P>
|
||||
There is no limit to the number of non-capturing subpatterns, but the maximum
|
||||
depth of nesting of all kinds of parenthesized subpattern, including capturing
|
||||
subpatterns, assertions, and other types of subpattern, is 200.
|
||||
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, and the maximum number
|
||||
of named subpatterns is 10000.
|
||||
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
|
||||
@@ -151,14 +160,15 @@ category properties was added.
|
||||
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. When you do this, both the pattern and any
|
||||
subject strings that are matched against it are treated as UTF-8 strings
|
||||
instead of just strings of bytes.
|
||||
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
|
||||
just strings of bytes.
|
||||
</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 in several places, so should not be very large.
|
||||
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
|
||||
@@ -172,56 +182,95 @@ 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 following comments apply when PCRE is running in UTF-8 mode:
|
||||
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>
|
||||
1. When you set the PCRE_UTF8 flag, the strings passed as patterns and subjects
|
||||
are checked for validity on entry to the relevant functions. If an invalid
|
||||
UTF-8 string is passed, an error return is given. 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. If you pass an invalid UTF-8 string to
|
||||
PCRE when PCRE_NO_UTF8_CHECK is set, the results are undefined. Your program
|
||||
may crash.
|
||||
If an invalid UTF-8 string is passed to PCRE, an error return
|
||||
(PCRE_ERROR_BADUTF8) is given. 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>
|
||||
2. An unbraced hexadecimal escape sequence (such as \xb3) matches a two-byte
|
||||
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>
|
||||
3. Octal numbers up to \777 are recognized, and match two-byte UTF-8
|
||||
2. Octal numbers up to \777 are recognized, and match two-byte UTF-8
|
||||
characters for values greater than \177.
|
||||
</P>
|
||||
<P>
|
||||
4. Repeat quantifiers apply to complete UTF-8 characters, not to individual
|
||||
3. Repeat quantifiers apply to complete UTF-8 characters, not to individual
|
||||
bytes, for example: \x{100}{3}.
|
||||
</P>
|
||||
<P>
|
||||
5. The dot metacharacter matches one UTF-8 character instead of a single byte.
|
||||
4. The dot metacharacter matches one UTF-8 character instead of a single byte.
|
||||
</P>
|
||||
<P>
|
||||
6. The escape sequence \C can be used to match a single byte in UTF-8 mode,
|
||||
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>
|
||||
7. The character escapes \b, \B, \d, \D, \s, \S, \w, and \W correctly
|
||||
6. The character escapes \b, \B, \d, \D, \s, \S, \w, and \W correctly
|
||||
test characters of any code value, but 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 includes Unicode
|
||||
property support, because to do otherwise would slow down PCRE in many common
|
||||
cases. If you really want to test for a wider sense of, say, "digit", you
|
||||
must use Unicode property tests such as \p{Nd}.
|
||||
must use Unicode property tests such as \p{Nd}. Note that this also applies to
|
||||
\b, because it is defined in terms of \w and \W.
|
||||
</P>
|
||||
<P>
|
||||
8. Similarly, characters that match the POSIX named character classes are all
|
||||
7. Similarly, characters that match the POSIX named character classes are all
|
||||
low-valued characters.
|
||||
</P>
|
||||
<P>
|
||||
8. However, the Perl 5.10 horizontal and vertical whitespace matching escapes
|
||||
(\h, \H, \v, and \V) do match all the appropriate Unicode characters.
|
||||
</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
|
||||
@@ -236,17 +285,22 @@ these are not supported by PCRE.
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service,
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
Cambridge CB2 3QG, England.
|
||||
</P>
|
||||
<P>
|
||||
Putting an actual email address here seems to have been a spam magnet, so I've
|
||||
taken it away. If you want to email me, use my initial and surname, separated
|
||||
by a dot, at the domain ucs.cam.ac.uk.
|
||||
Last updated: 05 June 2006
|
||||
taken it away. If you want to email me, use my two initials, followed by the
|
||||
two digits 10, at the domain cam.ac.uk.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 11 April 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -27,8 +27,9 @@ SYNOPSIS
|
||||
DESCRIPTION
|
||||
</b><br>
|
||||
<P>
|
||||
This function compiles a regular expression into an internal form. Its
|
||||
arguments are:
|
||||
This function compiles a regular expression into an internal form. It is the
|
||||
same as <b>pcre_compile2()</b>, except for the absence of the <i>errorcodeptr</i>
|
||||
argument. Its arguments are:
|
||||
<pre>
|
||||
<i>pattern</i> A zero-terminated string containing the
|
||||
regular expression to be compiled
|
||||
@@ -40,34 +41,42 @@ arguments are:
|
||||
</pre>
|
||||
The option bits are:
|
||||
<pre>
|
||||
PCRE_ANCHORED Force pattern anchoring
|
||||
PCRE_AUTO_CALLOUT Compile automatic callouts
|
||||
PCRE_CASELESS Do caseless matching
|
||||
PCRE_DOLLAR_ENDONLY $ not to match newline at end
|
||||
PCRE_DOTALL . matches anything including NL
|
||||
PCRE_DUPNAMES Allow duplicate names for subpatterns
|
||||
PCRE_EXTENDED Ignore whitespace and # comments
|
||||
PCRE_EXTRA PCRE extra features
|
||||
(not much use currently)
|
||||
PCRE_FIRSTLINE Force matching to be before newline
|
||||
PCRE_MULTILINE ^ and $ match newlines within data
|
||||
PCRE_NEWLINE_CR Set CR as the newline sequence
|
||||
PCRE_NEWLINE_CRLF Set CRLF as the newline sequence
|
||||
PCRE_NEWLINE_LF Set LF as the newline sequence
|
||||
PCRE_NO_AUTO_CAPTURE Disable numbered capturing paren-
|
||||
theses (named ones available)
|
||||
PCRE_UNGREEDY Invert greediness of quantifiers
|
||||
PCRE_UTF8 Run in UTF-8 mode
|
||||
PCRE_NO_UTF8_CHECK Do not check the pattern for UTF-8
|
||||
validity (only relevant if
|
||||
PCRE_UTF8 is set)
|
||||
PCRE_ANCHORED Force pattern anchoring
|
||||
PCRE_AUTO_CALLOUT Compile automatic callouts
|
||||
PCRE_BSR_ANYCRLF \R matches only CR, LF, or CRLF
|
||||
PCRE_BSR_UNICODE \R matches all Unicode line endings
|
||||
PCRE_CASELESS Do caseless matching
|
||||
PCRE_DOLLAR_ENDONLY $ not to match newline at end
|
||||
PCRE_DOTALL . matches anything including NL
|
||||
PCRE_DUPNAMES Allow duplicate names for subpatterns
|
||||
PCRE_EXTENDED Ignore whitespace and # comments
|
||||
PCRE_EXTRA PCRE extra features
|
||||
(not much use currently)
|
||||
PCRE_FIRSTLINE Force matching to be before newline
|
||||
PCRE_JAVASCRIPT_COMPAT JavaScript compatibility
|
||||
PCRE_MULTILINE ^ and $ match newlines within data
|
||||
PCRE_NEWLINE_ANY Recognize any Unicode newline sequence
|
||||
PCRE_NEWLINE_ANYCRLF Recognize CR, LF, and CRLF as newline
|
||||
sequences
|
||||
PCRE_NEWLINE_CR Set CR as the newline sequence
|
||||
PCRE_NEWLINE_CRLF Set CRLF as the newline sequence
|
||||
PCRE_NEWLINE_LF Set LF as the newline sequence
|
||||
PCRE_NO_AUTO_CAPTURE Disable numbered capturing paren-
|
||||
theses (named ones available)
|
||||
PCRE_UNGREEDY Invert greediness of quantifiers
|
||||
PCRE_UTF8 Run in UTF-8 mode
|
||||
PCRE_NO_UTF8_CHECK Do not check the pattern for UTF-8
|
||||
validity (only relevant if
|
||||
PCRE_UTF8 is set)
|
||||
</pre>
|
||||
PCRE must be built with UTF-8 support in order to use PCRE_UTF8 and
|
||||
PCRE_NO_UTF8_CHECK.
|
||||
</P>
|
||||
<P>
|
||||
The yield of the function is a pointer to a private data structure that
|
||||
contains the compiled pattern, or NULL if an error was detected.
|
||||
contains the compiled pattern, or NULL if an error was detected. Note that
|
||||
compiling regular expressions with one version of PCRE for use with a different
|
||||
version is not guaranteed to work and may cause crashes.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
@@ -56,6 +56,8 @@ The option bits are:
|
||||
(not much use currently)
|
||||
PCRE_FIRSTLINE Force matching to be before newline
|
||||
PCRE_MULTILINE ^ and $ match newlines within data
|
||||
PCRE_NEWLINE_ANY Recognize any Unicode newline sequence
|
||||
PCRE_NEWLINE_ANYCRLF Recognize CR, LF, and CRLF as newline sequences
|
||||
PCRE_NEWLINE_CR Set CR as the newline sequence
|
||||
PCRE_NEWLINE_CRLF Set CRLF as the newline sequence
|
||||
PCRE_NEWLINE_LF Set LF as the newline sequence
|
||||
@@ -72,7 +74,9 @@ PCRE_NO_UTF8_CHECK.
|
||||
</P>
|
||||
<P>
|
||||
The yield of the function is a pointer to a private data structure that
|
||||
contains the compiled pattern, or NULL if an error was detected.
|
||||
contains the compiled pattern, or NULL if an error was detected. Note that
|
||||
compiling regular expressions with one version of PCRE for use with a different
|
||||
version is not guaranteed to work and may cause crashes.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
@@ -38,7 +38,15 @@ The available codes are:
|
||||
PCRE_CONFIG_MATCH_LIMIT Internal resource limit
|
||||
PCRE_CONFIG_MATCH_LIMIT_RECURSION
|
||||
Internal recursion depth limit
|
||||
PCRE_CONFIG_NEWLINE Value of the newline sequence
|
||||
PCRE_CONFIG_NEWLINE Value of the default newline sequence:
|
||||
13 (0x000d) for CR
|
||||
10 (0x000a) for LF
|
||||
3338 (0x0d0a) for CRLF
|
||||
-2 for ANYCRLF
|
||||
-1 for ANY
|
||||
PCRE_CONFIG_BSR Indicates what \R matches by default:
|
||||
0 all Unicode line endings
|
||||
1 CR, LF, or CRLF only
|
||||
PCRE_CONFIG_POSIX_MALLOC_THRESHOLD
|
||||
Threshold of return slots, above
|
||||
which <b>malloc()</b> is used by
|
||||
|
||||
@@ -37,7 +37,7 @@ buffer. The arguments are:
|
||||
<i>buffer</i> Buffer to receive the string
|
||||
<i>buffersize</i> Size of buffer
|
||||
</pre>
|
||||
The yield is the legnth of the string, PCRE_ERROR_NOMEMORY if the buffer was
|
||||
The yield is the length of the string, PCRE_ERROR_NOMEMORY if the buffer was
|
||||
too small, or PCRE_ERROR_NOSUBSTRING if the string number is invalid.
|
||||
</P>
|
||||
<P>
|
||||
|
||||
@@ -29,9 +29,9 @@ DESCRIPTION
|
||||
</b><br>
|
||||
<P>
|
||||
This function matches a compiled regular expression against a given subject
|
||||
string, using a DFA matching algorithm (<i>not</i> Perl-compatible). Note that
|
||||
the main, Perl-compatible, matching function is <b>pcre_exec()</b>. The
|
||||
arguments for this function are:
|
||||
string, using an alternative matching algorithm that scans the subject string
|
||||
just once (<i>not</i> Perl-compatible). Note that the main, Perl-compatible,
|
||||
matching function is <b>pcre_exec()</b>. The arguments for this function are:
|
||||
<pre>
|
||||
<i>code</i> Points to the compiled pattern
|
||||
<i>extra</i> Points to an associated <b>pcre_extra</b> structure,
|
||||
@@ -49,12 +49,17 @@ arguments for this function are:
|
||||
The options are:
|
||||
<pre>
|
||||
PCRE_ANCHORED Match only at the first position
|
||||
PCRE_BSR_ANYCRLF \R matches only CR, LF, or CRLF
|
||||
PCRE_BSR_UNICODE \R matches all Unicode line endings
|
||||
PCRE_NEWLINE_ANY Recognize any Unicode newline sequence
|
||||
PCRE_NEWLINE_ANYCRLF Recognize CR, LF, and CRLF as newline sequences
|
||||
PCRE_NEWLINE_CR Set CR as the newline sequence
|
||||
PCRE_NEWLINE_CRLF Set CRLF as the newline sequence
|
||||
PCRE_NEWLINE_LF Set LF as the newline sequence
|
||||
PCRE_NOTBOL Subject is not the beginning of a line
|
||||
PCRE_NOTEOL Subject is not the end of a line
|
||||
PCRE_NOTEMPTY An empty string is not a valid match
|
||||
PCRE_NO_START_OPTIMIZE Do not do "start-match" optimizations
|
||||
PCRE_NO_UTF8_CHECK Do not check the subject for UTF-8
|
||||
validity (only relevant if PCRE_UTF8
|
||||
was set at compile time)
|
||||
@@ -62,8 +67,8 @@ The options are:
|
||||
PCRE_DFA_SHORTEST Return only the shortest match
|
||||
PCRE_DFA_RESTART This is a restart after a partial match
|
||||
</pre>
|
||||
There are restrictions on what may appear in a pattern when matching using the
|
||||
DFA algorithm is requested. Details are given in the
|
||||
There are restrictions on what may appear in a pattern when using this matching
|
||||
function. Details are given in the
|
||||
<a href="pcrematching.html"><b>pcrematching</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
@@ -79,7 +84,7 @@ A <b>pcre_extra</b> structure contains the following fields:
|
||||
</pre>
|
||||
The flag bits are PCRE_EXTRA_STUDY_DATA, PCRE_EXTRA_MATCH_LIMIT,
|
||||
PCRE_EXTRA_MATCH_LIMIT_RECURSION, PCRE_EXTRA_CALLOUT_DATA, and
|
||||
PCRE_EXTRA_TABLES. For DFA matching, the <i>match_limit</i> and
|
||||
PCRE_EXTRA_TABLES. For this matching function, the <i>match_limit</i> and
|
||||
<i>match_limit_recursion</i> fields are not used, and must not be set.
|
||||
</P>
|
||||
<P>
|
||||
|
||||
@@ -45,19 +45,26 @@ offsets to captured substrings. Its arguments are:
|
||||
The options are:
|
||||
<pre>
|
||||
PCRE_ANCHORED Match only at the first position
|
||||
PCRE_BSR_ANYCRLF \R matches only CR, LF, or CRLF
|
||||
PCRE_BSR_UNICODE \R matches all Unicode line endings
|
||||
PCRE_NEWLINE_ANY Recognize any Unicode newline sequence
|
||||
PCRE_NEWLINE_ANYCRLF Recognize CR, LF, and CRLF as newline sequences
|
||||
PCRE_NEWLINE_CR Set CR as the newline sequence
|
||||
PCRE_NEWLINE_CRLF Set CRLF as the newline sequence
|
||||
PCRE_NEWLINE_LF Set LF as the newline sequence
|
||||
PCRE_NOTBOL Subject is not the beginning of a line
|
||||
PCRE_NOTEOL Subject is not the end of a line
|
||||
PCRE_NOTEMPTY An empty string is not a valid match
|
||||
PCRE_NO_START_OPTIMIZE Do not do "start-match" optimizations
|
||||
PCRE_NO_UTF8_CHECK Do not check the subject for UTF-8
|
||||
validity (only relevant if PCRE_UTF8
|
||||
was set at compile time)
|
||||
PCRE_PARTIAL Return PCRE_ERROR_PARTIAL for a partial match
|
||||
</pre>
|
||||
There are restrictions on what may appear in a pattern when partial matching is
|
||||
requested.
|
||||
requested. For details, see the
|
||||
<a href="pcrepartial.html"><b>pcrepartial</b></a>
|
||||
page.
|
||||
</P>
|
||||
<P>
|
||||
A <b>pcre_extra</b> structure contains the following fields:
|
||||
|
||||
@@ -42,13 +42,14 @@ The following information is available:
|
||||
-1 for start of string
|
||||
or after newline, or
|
||||
-2 otherwise
|
||||
PCRE_INFO_FIRSTTABLE Table of first bytes
|
||||
(after studying)
|
||||
PCRE_INFO_FIRSTTABLE Table of first bytes (after studying)
|
||||
PCRE_INFO_JCHANGED Return 1 if (?J) or (?-J) was used
|
||||
PCRE_INFO_LASTLITERAL Literal last byte required
|
||||
PCRE_INFO_NAMECOUNT Number of named subpatterns
|
||||
PCRE_INFO_NAMEENTRYSIZE Size of name table entry
|
||||
PCRE_INFO_NAMETABLE Pointer to name table
|
||||
PCRE_INFO_OPTIONS Options used for compilation
|
||||
PCRE_INFO_OKPARTIAL Return 1 if partial matching can be tried
|
||||
PCRE_INFO_OPTIONS Option bits used for compilation
|
||||
PCRE_INFO_SIZE Size of compiled pattern
|
||||
PCRE_INFO_STUDYSIZE Size of study data
|
||||
</pre>
|
||||
|
||||
@@ -39,9 +39,10 @@ arguments are:
|
||||
<i>stringptr</i> Where to put the string pointer
|
||||
</pre>
|
||||
The memory in which the substring is placed is obtained by calling
|
||||
<b>pcre_malloc()</b>. The yield of the function is the length of the extracted
|
||||
substring, PCRE_ERROR_NOMEMORY if sufficient memory could not be obtained, or
|
||||
PCRE_ERROR_NOSUBSTRING if the string name is invalid.
|
||||
<b>pcre_malloc()</b>. The convenience function <b>pcre_free_substring()</b> can
|
||||
be used to free it when it is no longer needed. The yield of the function is
|
||||
the length of the extracted substring, PCRE_ERROR_NOMEMORY if sufficient memory
|
||||
could not be obtained, or PCRE_ERROR_NOSUBSTRING if the string name is invalid.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
@@ -33,7 +33,10 @@ parenthesis in a compiled pattern. Its arguments are:
|
||||
<i>name</i> Name whose number is required
|
||||
</pre>
|
||||
The yield of the function is the number of the parenthesis if the name is
|
||||
found, or PCRE_ERROR_NOSUBSTRING otherwise.
|
||||
found, or PCRE_ERROR_NOSUBSTRING otherwise. When duplicate names are allowed
|
||||
(PCRE_DUPNAMES is set), it is not defined which of the numbers is returned by
|
||||
<b>pcre_get_stringnumber()</b>. You can obtain the complete list by calling
|
||||
<b>pcre_get_stringtable_entries()</b>.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
@@ -44,7 +44,7 @@ PCRE_ERROR_NOSUBSTRING if none are found.
|
||||
There is a complete description of the PCRE native API, including the format of
|
||||
the table entries, in the
|
||||
<a href="pcreapi.html"><b>pcreapi</b></a>
|
||||
page and a description of the POSIX API in the
|
||||
page, and a description of the POSIX API in the
|
||||
<a href="pcreposix.html"><b>pcreposix</b></a>
|
||||
page.
|
||||
<p>
|
||||
|
||||
@@ -37,9 +37,10 @@ arguments are:
|
||||
<i>stringptr</i> Where to put the string pointer
|
||||
</pre>
|
||||
The memory in which the substring is placed is obtained by calling
|
||||
<b>pcre_malloc()</b>. The yield of the function is the length of the substring,
|
||||
PCRE_ERROR_NOMEMORY if sufficient memory could not be obtained, or
|
||||
PCRE_ERROR_NOSUBSTRING if the string number is invalid.
|
||||
<b>pcre_malloc()</b>. The convenience function <b>pcre_free_substring()</b> can
|
||||
be used to free it when it is no longer needed. The yield of the function is
|
||||
the length of the substring, PCRE_ERROR_NOMEMORY if sufficient memory could not
|
||||
be obtained, or PCRE_ERROR_NOSUBSTRING if the string number is invalid.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
@@ -35,10 +35,12 @@ substrings. The arguments are:
|
||||
<i>listptr</i> Where to put a pointer to the list
|
||||
</pre>
|
||||
The memory in which the substrings and the list are placed is obtained by
|
||||
calling <b>pcre_malloc()</b>. A pointer to a list of pointers is put in
|
||||
the variable whose address is in <i>listptr</i>. The list is terminated by a
|
||||
NULL pointer. The yield of the function is zero on success or
|
||||
PCRE_ERROR_NOMEMORY if sufficient memory could not be obtained.
|
||||
calling <b>pcre_malloc()</b>. The convenience function
|
||||
<b>pcre_free_substring_list()</b> can be used to free it when it is no longer
|
||||
needed. A pointer to a list of pointers is put in the variable whose address is
|
||||
in <i>listptr</i>. The list is terminated by a NULL pointer. The yield of the
|
||||
function is zero on success or PCRE_ERROR_NOMEMORY if sufficient memory could
|
||||
not be obtained.
|
||||
</P>
|
||||
<P>
|
||||
There is a complete description of the PCRE native API in the
|
||||
|
||||
+374
-139
@@ -32,6 +32,9 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC17" href="#SEC17">DUPLICATE SUBPATTERN NAMES</a>
|
||||
<li><a name="TOC18" href="#SEC18">FINDING ALL POSSIBLE MATCHES</a>
|
||||
<li><a name="TOC19" href="#SEC19">MATCHING A PATTERN: THE ALTERNATIVE FUNCTION</a>
|
||||
<li><a name="TOC20" href="#SEC20">SEE ALSO</a>
|
||||
<li><a name="TOC21" href="#SEC21">AUTHOR</a>
|
||||
<li><a name="TOC22" href="#SEC22">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PCRE NATIVE API</a><br>
|
||||
<P>
|
||||
@@ -140,8 +143,8 @@ man page, in case the conversion went wrong.
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">PCRE API OVERVIEW</a><br>
|
||||
<P>
|
||||
PCRE has its own native API, which is described in this document. There is
|
||||
also a set of wrapper functions that correspond to the POSIX regular expression
|
||||
PCRE has its own native API, which is described in this document. There are
|
||||
also some wrapper functions that correspond to the POSIX regular expression
|
||||
API. These are described in the
|
||||
<a href="pcreposix.html"><b>pcreposix</b></a>
|
||||
documentation. Both of these APIs define a set of C function calls. A C++
|
||||
@@ -164,15 +167,15 @@ in a Perl-compatible manner. A sample program that demonstrates the simplest
|
||||
way of using them is provided in the file called <i>pcredemo.c</i> in the source
|
||||
distribution. The
|
||||
<a href="pcresample.html"><b>pcresample</b></a>
|
||||
documentation describes how to run it.
|
||||
documentation describes how to compile and run it.
|
||||
</P>
|
||||
<P>
|
||||
A second matching function, <b>pcre_dfa_exec()</b>, which is not
|
||||
Perl-compatible, is also provided. This uses a different algorithm for the
|
||||
matching. The alternative algorithm finds all possible matches (at a given
|
||||
point in the subject). However, this algorithm does not return captured
|
||||
substrings. A description of the two matching algorithms and their advantages
|
||||
and disadvantages is given in the
|
||||
point in the subject), and scans the subject just once. However, this algorithm
|
||||
does not return captured substrings. A description of the two matching
|
||||
algorithms and their advantages and disadvantages is given in the
|
||||
<a href="pcrematching.html"><b>pcrematching</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
@@ -240,19 +243,45 @@ by the caller to a "callout" function, which PCRE will then call at specified
|
||||
points during a matching operation. Details are given in the
|
||||
<a href="pcrecallout.html"><b>pcrecallout</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
<a name="newlines"></a></P>
|
||||
<br><a name="SEC3" href="#TOC1">NEWLINES</a><br>
|
||||
<P>
|
||||
PCRE supports three different conventions for indicating line breaks in
|
||||
strings: a single CR character, a single LF character, or the two-character
|
||||
sequence CRLF. All three are used as "standard" by different operating systems.
|
||||
When PCRE is built, a default can be specified. The default default is LF,
|
||||
which is the Unix standard. When PCRE is run, the default can be overridden,
|
||||
either when a pattern is compiled, or when it is matched.
|
||||
<br>
|
||||
<br>
|
||||
PCRE supports five different conventions for indicating line breaks in
|
||||
strings: a single CR (carriage return) character, a single LF (linefeed)
|
||||
character, the two-character sequence CRLF, any of the three preceding, or any
|
||||
Unicode newline sequence. The Unicode newline sequences are the three just
|
||||
mentioned, plus the single characters VT (vertical tab, U+000B), FF (formfeed,
|
||||
U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS
|
||||
(paragraph separator, U+2029).
|
||||
</P>
|
||||
<P>
|
||||
Each of the first three conventions is used by at least one operating system as
|
||||
its standard newline sequence. When PCRE is built, a default can be specified.
|
||||
The default default is LF, which is the Unix standard. When PCRE is run, the
|
||||
default can be overridden, either when a pattern is compiled, or when it is
|
||||
matched.
|
||||
</P>
|
||||
<P>
|
||||
At compile time, the newline convention can be specified by the <i>options</i>
|
||||
argument of <b>pcre_compile()</b>, or it can be specified by special text at the
|
||||
start of the pattern itself; this overrides any other settings. See the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
page for details of the special character sequences.
|
||||
</P>
|
||||
<P>
|
||||
In the PCRE documentation the word "newline" is used to mean "the character or
|
||||
pair of characters that indicate a line break".
|
||||
pair of characters that indicate a line break". The choice of newline
|
||||
convention affects the handling of the dot, circumflex, and dollar
|
||||
metacharacters, the handling of #-comments in /x mode, and, when CRLF is a
|
||||
recognized line ending sequence, the match position advancement for a
|
||||
non-anchored pattern. There is more detail about this in the
|
||||
<a href="#execoptions">section on <b>pcre_exec()</b> options</a>
|
||||
below.
|
||||
</P>
|
||||
<P>
|
||||
The choice of newline convention does not affect the interpretation of
|
||||
the \n or \r escape sequences, nor does it affect what \R matches, which is
|
||||
controlled in a similar way, but by separate options.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">MULTITHREADING</a><br>
|
||||
<P>
|
||||
@@ -271,7 +300,9 @@ The compiled form of a regular expression can be saved and re-used at a later
|
||||
time, possibly by a different program, and even on a host other than the one on
|
||||
which it was compiled. Details are given in the
|
||||
<a href="pcreprecompile.html"><b>pcreprecompile</b></a>
|
||||
documentation.
|
||||
documentation. However, compiling a regular expression with one version of PCRE
|
||||
for use with a different version is not guaranteed to work and may cause
|
||||
crashes.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">CHECKING BUILD-TIME OPTIONS</a><br>
|
||||
<P>
|
||||
@@ -301,9 +332,18 @@ properties is available; otherwise it is set to zero.
|
||||
PCRE_CONFIG_NEWLINE
|
||||
</pre>
|
||||
The output is an integer whose value specifies the default character sequence
|
||||
that is recognized as meaning "newline". The three values that are supported
|
||||
are: 10 for LF, 13 for CR, and 3338 for CRLF. The default should normally be
|
||||
the standard sequence for your operating system.
|
||||
that is recognized as meaning "newline". The four values that are supported
|
||||
are: 10 for LF, 13 for CR, 3338 for CRLF, -2 for ANYCRLF, and -1 for ANY.
|
||||
Though they are derived from ASCII, the same values are returned in EBCDIC
|
||||
environments. The default should normally correspond to the standard sequence
|
||||
for your operating system.
|
||||
<pre>
|
||||
PCRE_CONFIG_BSR
|
||||
</pre>
|
||||
The output is an integer whose value indicates what character sequences the \R
|
||||
escape sequence matches by default. A value of 0 means that \R matches any
|
||||
Unicode line ending sequence; a value of 1 means that \R matches only CR, LF,
|
||||
or CRLF. The default can be overridden when a pattern is compiled or matched.
|
||||
<pre>
|
||||
PCRE_CONFIG_LINK_SIZE
|
||||
</pre>
|
||||
@@ -323,13 +363,13 @@ documentation.
|
||||
<pre>
|
||||
PCRE_CONFIG_MATCH_LIMIT
|
||||
</pre>
|
||||
The output is an integer that gives the default limit for the number of
|
||||
The output is a long integer that gives the default limit for the number of
|
||||
internal matching function calls in a <b>pcre_exec()</b> execution. Further
|
||||
details are given with <b>pcre_exec()</b> below.
|
||||
<pre>
|
||||
PCRE_CONFIG_MATCH_LIMIT_RECURSION
|
||||
</pre>
|
||||
The output is an integer that gives the default limit for the depth of
|
||||
The output is a long integer that gives the default limit for the depth of
|
||||
recursion when calling the internal matching function in a <b>pcre_exec()</b>
|
||||
execution. Further details are given with <b>pcre_exec()</b> below.
|
||||
<pre>
|
||||
@@ -374,16 +414,17 @@ fully relocatable, because it may contain a copy of the <i>tableptr</i>
|
||||
argument, which is an address (see below).
|
||||
</P>
|
||||
<P>
|
||||
The <i>options</i> argument contains independent bits that affect the
|
||||
The <i>options</i> argument contains various bit settings that affect the
|
||||
compilation. It should be zero if no options are required. The available
|
||||
options are described below. Some of them, in particular, those that are
|
||||
compatible with Perl, can also be set and unset from within the pattern (see
|
||||
the detailed description in the
|
||||
options are described below. Some of them (in particular, those that are
|
||||
compatible with Perl, but also some others) can also be set and unset from
|
||||
within the pattern (see the detailed description in the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
documentation). For these options, the contents of the <i>options</i> argument
|
||||
specifies their initial settings at the start of compilation and execution. The
|
||||
PCRE_ANCHORED and PCRE_NEWLINE_<i>xxx</i> options can be set at the time of
|
||||
matching as well as at compile time.
|
||||
documentation). For those options that can be different in different parts of
|
||||
the pattern, the contents of the <i>options</i> argument specifies their initial
|
||||
settings at the start of compilation and execution. The PCRE_ANCHORED and
|
||||
PCRE_NEWLINE_<i>xxx</i> options can be set at the time of matching as well as at
|
||||
compile time.
|
||||
</P>
|
||||
<P>
|
||||
If <i>errptr</i> is NULL, <b>pcre_compile()</b> returns NULL immediately.
|
||||
@@ -439,6 +480,15 @@ all with number 255, before each pattern item. For discussion of the callout
|
||||
facility, see the
|
||||
<a href="pcrecallout.html"><b>pcrecallout</b></a>
|
||||
documentation.
|
||||
<pre>
|
||||
PCRE_BSR_ANYCRLF
|
||||
PCRE_BSR_UNICODE
|
||||
</pre>
|
||||
These options (which are mutually exclusive) control what the \R escape
|
||||
sequence matches. The choice is either to match only CR, LF, or CRLF, or to
|
||||
match any Unicode newline sequence. The default is specified when PCRE is
|
||||
built. It can be overridden from within the pattern, or by setting an option
|
||||
when a compiled pattern is matched.
|
||||
<pre>
|
||||
PCRE_CASELESS
|
||||
</pre>
|
||||
@@ -467,8 +517,8 @@ If this bit is set, a dot metacharater in the pattern matches all characters,
|
||||
including those that indicate newline. Without it, a dot does not match when
|
||||
the current position is at a newline. This option is equivalent to Perl's /s
|
||||
option, and it can be changed within a pattern by a (?s) option setting. A
|
||||
negative class such as [^a] always matches newlines, independent of the setting
|
||||
of this option.
|
||||
negative class such as [^a] always matches newline characters, independent of
|
||||
the setting of this option.
|
||||
<pre>
|
||||
PCRE_DUPNAMES
|
||||
</pre>
|
||||
@@ -510,6 +560,22 @@ this option. It can also be set by a (?X) option setting within a pattern.
|
||||
If this option is set, an unanchored pattern is required to match before or at
|
||||
the first newline in the subject string, though the matched text may continue
|
||||
over the newline.
|
||||
<pre>
|
||||
PCRE_JAVASCRIPT_COMPAT
|
||||
</pre>
|
||||
If this option is set, PCRE's behaviour is changed in some ways so that it is
|
||||
compatible with JavaScript rather than Perl. The changes are as follows:
|
||||
</P>
|
||||
<P>
|
||||
(1) A lone closing square bracket in a pattern causes a compile-time error,
|
||||
because this is illegal in JavaScript (by default it is treated as a data
|
||||
character). Thus, the pattern AB]CD becomes illegal when this option is set.
|
||||
</P>
|
||||
<P>
|
||||
(2) At run time, a back reference to an unset subpattern group matches an empty
|
||||
string (by default this causes the current matching alternative to fail). A
|
||||
pattern such as (\1)(a) succeeds when this option is set (assuming it can find
|
||||
an "a" in the subject), whereas it fails by default, for Perl compatibility.
|
||||
<pre>
|
||||
PCRE_MULTILINE
|
||||
</pre>
|
||||
@@ -531,19 +597,40 @@ occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no effect.
|
||||
PCRE_NEWLINE_CR
|
||||
PCRE_NEWLINE_LF
|
||||
PCRE_NEWLINE_CRLF
|
||||
PCRE_NEWLINE_ANYCRLF
|
||||
PCRE_NEWLINE_ANY
|
||||
</pre>
|
||||
These options override the default newline definition that was chosen when PCRE
|
||||
was built. Setting the first or the second specifies that a newline is
|
||||
indicated by a single character (CR or LF, respectively). Setting both of them
|
||||
specifies that a newline is indicated by the two-character CRLF sequence. For
|
||||
convenience, PCRE_NEWLINE_CRLF is defined to contain both bits. The only time
|
||||
that a line break is relevant when compiling a pattern is if PCRE_EXTENDED is
|
||||
set, and an unescaped # outside a character class is encountered. This
|
||||
indicates a comment that lasts until after the next newline.
|
||||
indicated by a single character (CR or LF, respectively). Setting
|
||||
PCRE_NEWLINE_CRLF specifies that a newline is indicated by the two-character
|
||||
CRLF sequence. Setting PCRE_NEWLINE_ANYCRLF specifies that any of the three
|
||||
preceding sequences should be recognized. Setting PCRE_NEWLINE_ANY specifies
|
||||
that any Unicode newline sequence should be recognized. The Unicode newline
|
||||
sequences are the three just mentioned, plus the single characters VT (vertical
|
||||
tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line
|
||||
separator, U+2028), and PS (paragraph separator, U+2029). The last two are
|
||||
recognized only in UTF-8 mode.
|
||||
</P>
|
||||
<P>
|
||||
The newline option set at compile time becomes the default that is used for
|
||||
<b>pcre_exec()</b> and <b>pcre_dfa_exec()</b>, but it can be overridden.
|
||||
The newline setting in the options word uses three bits that are treated
|
||||
as a number, giving eight possibilities. Currently only six are used (default
|
||||
plus the five values above). This means that if you set more than one newline
|
||||
option, the combination may or may not be sensible. For example,
|
||||
PCRE_NEWLINE_CR with PCRE_NEWLINE_LF is equivalent to PCRE_NEWLINE_CRLF, but
|
||||
other combinations may yield unused numbers and cause an error.
|
||||
</P>
|
||||
<P>
|
||||
The only time that a line break is specially recognized when compiling a
|
||||
pattern is if PCRE_EXTENDED is set, and an unescaped # outside a character
|
||||
class is encountered. This indicates a comment that lasts until after the next
|
||||
line break sequence. In other circumstances, line break sequences are treated
|
||||
as literal data, except that in PCRE_EXTENDED mode, both CR and LF are treated
|
||||
as whitespace characters and are therefore ignored.
|
||||
</P>
|
||||
<P>
|
||||
The newline option that is set at compile time becomes the default that is used
|
||||
for <b>pcre_exec()</b> and <b>pcre_dfa_exec()</b>, but it can be overridden.
|
||||
<pre>
|
||||
PCRE_NO_AUTO_CAPTURE
|
||||
</pre>
|
||||
@@ -574,20 +661,24 @@ page.
|
||||
PCRE_NO_UTF8_CHECK
|
||||
</pre>
|
||||
When PCRE_UTF8 is set, the validity of the pattern as a UTF-8 string is
|
||||
automatically checked. If an invalid UTF-8 sequence of bytes is found,
|
||||
<b>pcre_compile()</b> returns an error. If you already know that your pattern is
|
||||
valid, and you want to skip this check for performance reasons, you can set the
|
||||
PCRE_NO_UTF8_CHECK option. When it is set, the effect of passing an invalid
|
||||
UTF-8 string as a pattern is undefined. It may cause your program to crash.
|
||||
Note that this option can also be passed to <b>pcre_exec()</b> and
|
||||
<b>pcre_dfa_exec()</b>, to suppress the UTF-8 validity checking of subject
|
||||
strings.
|
||||
automatically checked. There is a discussion about the
|
||||
<a href="pcre.html#utf8strings">validity of UTF-8 strings</a>
|
||||
in the main
|
||||
<a href="pcre.html"><b>pcre</b></a>
|
||||
page. If an invalid UTF-8 sequence of bytes is found, <b>pcre_compile()</b>
|
||||
returns an error. If you already know that your pattern is valid, and you want
|
||||
to skip this check for performance reasons, you can set the PCRE_NO_UTF8_CHECK
|
||||
option. When it is set, the effect of passing an invalid UTF-8 string as a
|
||||
pattern is undefined. It may cause your program to crash. Note that this option
|
||||
can also be passed to <b>pcre_exec()</b> and <b>pcre_dfa_exec()</b>, to suppress
|
||||
the UTF-8 validity checking of subject strings.
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">COMPILATION ERROR CODES</a><br>
|
||||
<P>
|
||||
The following table lists the error codes than may be returned by
|
||||
<b>pcre_compile2()</b>, along with the error messages that may be returned by
|
||||
both compiling functions.
|
||||
both compiling functions. As PCRE has developed, some error codes have fallen
|
||||
out of use. To avoid confusion, they have not been re-used.
|
||||
<pre>
|
||||
0 no error
|
||||
1 \ at end of pattern
|
||||
@@ -599,17 +690,17 @@ both compiling functions.
|
||||
7 invalid escape sequence in character class
|
||||
8 range out of order in character class
|
||||
9 nothing to repeat
|
||||
10 operand of unlimited repeat could match the empty string
|
||||
10 [this code is not in use]
|
||||
11 internal error: unexpected repeat
|
||||
12 unrecognized character after (?
|
||||
12 unrecognized character after (? or (?-
|
||||
13 POSIX named classes are supported only within a class
|
||||
14 missing )
|
||||
15 reference to non-existent subpattern
|
||||
16 erroffset passed as NULL
|
||||
17 unknown option bit(s) set
|
||||
18 missing ) after comment
|
||||
19 parentheses nested too deeply
|
||||
20 regular expression too large
|
||||
19 [this code is not in use]
|
||||
20 regular expression is too large
|
||||
21 failed to get memory
|
||||
22 unmatched parentheses
|
||||
23 internal error: code overflow
|
||||
@@ -618,11 +709,11 @@ both compiling functions.
|
||||
26 malformed number or name after (?(
|
||||
27 conditional group contains more than two branches
|
||||
28 assertion expected after (?(
|
||||
29 (?R or (?digits must be followed by )
|
||||
29 (?R or (?[+-]digits must be followed by )
|
||||
30 unknown POSIX class name
|
||||
31 POSIX collating elements are not supported
|
||||
32 this version of PCRE is not compiled with PCRE_UTF8 support
|
||||
33 spare error
|
||||
33 [this code is not in use]
|
||||
34 character value in \x{...} sequence is too large
|
||||
35 invalid condition (?(0)
|
||||
36 \C not allowed in lookbehind assertion
|
||||
@@ -631,17 +722,33 @@ both compiling functions.
|
||||
39 closing ) for (?C expected
|
||||
40 recursive call could loop indefinitely
|
||||
41 unrecognized character after (?P
|
||||
42 syntax error after (?P
|
||||
42 syntax error in subpattern name (missing terminator)
|
||||
43 two named subpatterns have the same name
|
||||
44 invalid UTF-8 string
|
||||
45 support for \P, \p, and \X has not been compiled
|
||||
46 malformed \P or \p sequence
|
||||
47 unknown property name after \P or \p
|
||||
48 subpattern name is too long (maximum 32 characters)
|
||||
49 too many named subpatterns (maximum 10,000)
|
||||
50 repeated subpattern is too long
|
||||
49 too many named subpatterns (maximum 10000)
|
||||
50 [this code is not in use]
|
||||
51 octal value is greater than \377 (not in UTF-8 mode)
|
||||
</PRE>
|
||||
52 internal error: overran compiling workspace
|
||||
53 internal error: previously-checked referenced subpattern not found
|
||||
54 DEFINE group contains more than one branch
|
||||
55 repeating a DEFINE group is not allowed
|
||||
56 inconsistent NEWLINE options
|
||||
57 \g is not followed by a braced, angle-bracketed, or quoted
|
||||
name/number or by a plain number
|
||||
58 a numbered reference must not be zero
|
||||
59 (*VERB) with an argument is not supported
|
||||
60 (*VERB) not recognized
|
||||
61 number is too big
|
||||
62 subpattern name expected
|
||||
63 digit expected after (?+
|
||||
64 ] is an invalid data character in JavaScript compatibility mode
|
||||
</pre>
|
||||
The numbers 32 and 10000 in errors 48 and 49 are defaults; different values may
|
||||
be used if the limits were changed when PCRE was built.
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">STUDYING A PATTERN</a><br>
|
||||
<P>
|
||||
@@ -698,20 +805,27 @@ bytes is created.
|
||||
<a name="localesupport"></a></P>
|
||||
<br><a name="SEC10" href="#TOC1">LOCALE SUPPORT</a><br>
|
||||
<P>
|
||||
PCRE handles caseless matching, and determines whether characters are letters
|
||||
PCRE handles caseless matching, and determines whether characters are letters,
|
||||
digits, or whatever, by reference to a set of tables, indexed by character
|
||||
value. When running in UTF-8 mode, this applies only to characters with codes
|
||||
less than 128. Higher-valued codes never match escapes such as \w or \d, but
|
||||
can be tested with \p if PCRE is built with Unicode character property
|
||||
support. The use of locales with Unicode is discouraged.
|
||||
support. The use of locales with Unicode is discouraged. If you are handling
|
||||
characters with codes greater than 128, you should either use UTF-8 and
|
||||
Unicode, or use locales, but not try to mix the two.
|
||||
</P>
|
||||
<P>
|
||||
An internal set of tables is created in the default C locale when PCRE is
|
||||
built. This is used when the final argument of <b>pcre_compile()</b> is NULL,
|
||||
and is sufficient for many applications. An alternative set of tables can,
|
||||
however, be supplied. These may be created in a different locale from the
|
||||
default. As more and more applications change to using Unicode, the need for
|
||||
this locale support is expected to die away.
|
||||
PCRE contains an internal set of tables that are used when the final argument
|
||||
of <b>pcre_compile()</b> is NULL. These are sufficient for many applications.
|
||||
Normally, the internal tables recognize only ASCII characters. However, when
|
||||
PCRE is built, it is possible to cause the internal tables to be rebuilt in the
|
||||
default "C" locale of the local system, which may cause them to be different.
|
||||
</P>
|
||||
<P>
|
||||
The internal tables can always be overridden by tables supplied by the
|
||||
application that calls PCRE. These may be created in a different locale from
|
||||
the default. As more and more applications change to using Unicode, the need
|
||||
for this locale support is expected to die away.
|
||||
</P>
|
||||
<P>
|
||||
External tables are built by calling the <b>pcre_maketables()</b> function,
|
||||
@@ -725,6 +839,10 @@ the following code could be used:
|
||||
tables = pcre_maketables();
|
||||
re = pcre_compile(..., tables);
|
||||
</pre>
|
||||
The locale name "fr_FR" is used on Linux and other Unix-like systems; if you
|
||||
are using Windows, the name for the French locale is "french".
|
||||
</P>
|
||||
<P>
|
||||
When <b>pcre_maketables()</b> runs, the tables are built in memory that is
|
||||
obtained via <b>pcre_malloc</b>. It is the caller's responsibility to ensure
|
||||
that the memory containing the tables remains available for as long as it is
|
||||
@@ -810,7 +928,7 @@ still recognized for backwards compatibility.)
|
||||
</P>
|
||||
<P>
|
||||
If there is a fixed first byte, for example, from a pattern such as
|
||||
(cat|cow|coyote). Otherwise, if either
|
||||
(cat|cow|coyote), its value is returned. Otherwise, if either
|
||||
<br>
|
||||
<br>
|
||||
(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
|
||||
@@ -831,6 +949,18 @@ If the pattern was studied, and this resulted in the construction of a 256-bit
|
||||
table indicating a fixed set of bytes for the first byte in any matching
|
||||
string, a pointer to the table is returned. Otherwise NULL is returned. The
|
||||
fourth argument should point to an <b>unsigned char *</b> variable.
|
||||
<pre>
|
||||
PCRE_INFO_HASCRORLF
|
||||
</pre>
|
||||
Return 1 if the pattern contains any explicit matches for CR or LF characters,
|
||||
otherwise 0. The fourth argument should point to an <b>int</b> variable. An
|
||||
explicit match is either a literal CR or LF character, or \r or \n.
|
||||
<pre>
|
||||
PCRE_INFO_JCHANGED
|
||||
</pre>
|
||||
Return 1 if the (?J) or (?-J) option setting is used in the pattern, otherwise
|
||||
0. The fourth argument should point to an <b>int</b> variable. (?J) and
|
||||
(?-J) set and unset the local PCRE_DUPNAMES option, respectively.
|
||||
<pre>
|
||||
PCRE_INFO_LASTLITERAL
|
||||
</pre>
|
||||
@@ -868,7 +998,7 @@ alphabetical order. When PCRE_DUPNAMES is set, duplicate names are in order of
|
||||
their parentheses numbers. For example, consider the following pattern (assume
|
||||
PCRE_EXTENDED is set, so white space - including newlines - is ignored):
|
||||
<pre>
|
||||
(?P<date> (?P<year>(\d\d)?\d\d) - (?P<month>\d\d) - (?P<day>\d\d) )
|
||||
(?<date> (?<year>(\d\d)?\d\d) - (?<month>\d\d) - (?<day>\d\d) )
|
||||
</pre>
|
||||
There are four named subpatterns, so the table has four entries, and each entry
|
||||
in the table is eight bytes long. The table is as follows, with non-printing
|
||||
@@ -882,13 +1012,24 @@ bytes shows in hexadecimal, and undefined bytes shown as ??:
|
||||
When writing code to extract data from named subpatterns using the
|
||||
name-to-number map, remember that the length of the entries is likely to be
|
||||
different for each compiled pattern.
|
||||
<pre>
|
||||
PCRE_INFO_OKPARTIAL
|
||||
</pre>
|
||||
Return 1 if the pattern can be used for partial matching, otherwise 0. The
|
||||
fourth argument should point to an <b>int</b> variable. The
|
||||
<a href="pcrepartial.html"><b>pcrepartial</b></a>
|
||||
documentation lists the restrictions that apply to patterns when partial
|
||||
matching is used.
|
||||
<pre>
|
||||
PCRE_INFO_OPTIONS
|
||||
</pre>
|
||||
Return a copy of the options with which the pattern was compiled. The fourth
|
||||
argument should point to an <b>unsigned long int</b> variable. These option bits
|
||||
are those specified in the call to <b>pcre_compile()</b>, modified by any
|
||||
top-level option settings within the pattern itself.
|
||||
top-level option settings at the start of the pattern itself. In other words,
|
||||
they are the options that will be in force when matching starts. For example,
|
||||
if the pattern /(?im)abc(?-i)d/ is compiled with the PCRE_EXTENDED option, the
|
||||
result is PCRE_CASELESS, PCRE_MULTILINE, and PCRE_EXTENDED.
|
||||
</P>
|
||||
<P>
|
||||
A pattern is automatically anchored by PCRE if all of its top-level
|
||||
@@ -1097,14 +1238,15 @@ the external tables might be at a different address when <b>pcre_exec()</b> is
|
||||
called. See the
|
||||
<a href="pcreprecompile.html"><b>pcreprecompile</b></a>
|
||||
documentation for a discussion of saving compiled patterns for later use.
|
||||
</P>
|
||||
<a name="execoptions"></a></P>
|
||||
<br><b>
|
||||
Option bits for <b>pcre_exec()</b>
|
||||
</b><br>
|
||||
<P>
|
||||
The unused bits of the <i>options</i> argument for <b>pcre_exec()</b> must be
|
||||
zero. The only bits that may be set are PCRE_ANCHORED, PCRE_NEWLINE_<i>xxx</i>,
|
||||
PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_UTF8_CHECK and PCRE_PARTIAL.
|
||||
PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_START_OPTIMIZE,
|
||||
PCRE_NO_UTF8_CHECK and PCRE_PARTIAL.
|
||||
<pre>
|
||||
PCRE_ANCHORED
|
||||
</pre>
|
||||
@@ -1112,15 +1254,52 @@ The PCRE_ANCHORED option limits <b>pcre_exec()</b> to matching at the first
|
||||
matching position. If a pattern was compiled with PCRE_ANCHORED, or turned out
|
||||
to be anchored by virtue of its contents, it cannot be made unachored at
|
||||
matching time.
|
||||
<pre>
|
||||
PCRE_BSR_ANYCRLF
|
||||
PCRE_BSR_UNICODE
|
||||
</pre>
|
||||
These options (which are mutually exclusive) control what the \R escape
|
||||
sequence matches. The choice is either to match only CR, LF, or CRLF, or to
|
||||
match any Unicode newline sequence. These options override the choice that was
|
||||
made or defaulted when the pattern was compiled.
|
||||
<pre>
|
||||
PCRE_NEWLINE_CR
|
||||
PCRE_NEWLINE_LF
|
||||
PCRE_NEWLINE_CRLF
|
||||
PCRE_NEWLINE_ANYCRLF
|
||||
PCRE_NEWLINE_ANY
|
||||
</pre>
|
||||
These options override the newline definition that was chosen or defaulted when
|
||||
the pattern was compiled. For details, see the description <b>pcre_compile()</b>
|
||||
above. During matching, the newline choice affects the behaviour of the dot,
|
||||
circumflex, and dollar metacharacters.
|
||||
the pattern was compiled. For details, see the description of
|
||||
<b>pcre_compile()</b> above. During matching, the newline choice affects the
|
||||
behaviour of the dot, circumflex, and dollar metacharacters. It may also alter
|
||||
the way the match position is advanced after a match failure for an unanchored
|
||||
pattern.
|
||||
</P>
|
||||
<P>
|
||||
When PCRE_NEWLINE_CRLF, PCRE_NEWLINE_ANYCRLF, or PCRE_NEWLINE_ANY is set, and a
|
||||
match attempt for an unanchored pattern fails when the current position is at a
|
||||
CRLF sequence, and the pattern contains no explicit matches for CR or LF
|
||||
characters, the match position is advanced by two characters instead of one, in
|
||||
other words, to after the CRLF.
|
||||
</P>
|
||||
<P>
|
||||
The above rule is a compromise that makes the most common cases work as
|
||||
expected. For example, if the pattern is .+A (and the PCRE_DOTALL option is not
|
||||
set), it does not match the string "\r\nA" because, after failing at the
|
||||
start, it skips both the CR and the LF before retrying. However, the pattern
|
||||
[\r\n]A does match that string, because it contains an explicit CR or LF
|
||||
reference, and so advances only by one character after the first failure.
|
||||
</P>
|
||||
<P>
|
||||
An explicit match for CR of LF is either a literal appearance of one of those
|
||||
characters, or one of the \r or \n escape sequences. Implicit matches such as
|
||||
[^X] do not count, nor does \s (which includes CR and LF in the characters
|
||||
that it matches).
|
||||
</P>
|
||||
<P>
|
||||
Notwithstanding the above, anomalous effects may still occur when CRLF is a
|
||||
valid newline sequence and explicit \r or \n escapes appear in the pattern.
|
||||
<pre>
|
||||
PCRE_NOTBOL
|
||||
</pre>
|
||||
@@ -1158,15 +1337,30 @@ matching a null string by first trying the match again at the same offset with
|
||||
PCRE_NOTEMPTY and PCRE_ANCHORED, and then if that fails by advancing the
|
||||
starting offset (see below) and trying an ordinary match again. There is some
|
||||
code that demonstrates how to do this in the <i>pcredemo.c</i> sample program.
|
||||
<pre>
|
||||
PCRE_NO_START_OPTIMIZE
|
||||
</pre>
|
||||
There are a number of optimizations that <b>pcre_exec()</b> uses at the start of
|
||||
a match, in order to speed up the process. For example, if it is known that a
|
||||
match must start with a specific character, it searches the subject for that
|
||||
character, and fails immediately if it cannot find it, without actually running
|
||||
the main matching function. When callouts are in use, these optimizations can
|
||||
cause them to be skipped. This option disables the "start-up" optimizations,
|
||||
causing performance to suffer, but ensuring that the callouts do occur.
|
||||
<pre>
|
||||
PCRE_NO_UTF8_CHECK
|
||||
</pre>
|
||||
When PCRE_UTF8 is set at compile time, the validity of the subject as a UTF-8
|
||||
string is automatically checked when <b>pcre_exec()</b> is subsequently called.
|
||||
The value of <i>startoffset</i> is also checked to ensure that it points to the
|
||||
start of a UTF-8 character. If an invalid UTF-8 sequence of bytes is found,
|
||||
<b>pcre_exec()</b> returns the error PCRE_ERROR_BADUTF8. If <i>startoffset</i>
|
||||
contains an invalid value, PCRE_ERROR_BADUTF8_OFFSET is returned.
|
||||
start of a UTF-8 character. There is a discussion about the validity of UTF-8
|
||||
strings in the
|
||||
<a href="pcre.html#utf8strings">section on UTF-8 support</a>
|
||||
in the main
|
||||
<a href="pcre.html"><b>pcre</b></a>
|
||||
page. If an invalid UTF-8 sequence of bytes is found, <b>pcre_exec()</b> returns
|
||||
the error PCRE_ERROR_BADUTF8. If <i>startoffset</i> contains an invalid value,
|
||||
PCRE_ERROR_BADUTF8_OFFSET is returned.
|
||||
</P>
|
||||
<P>
|
||||
If you already know that your subject is valid, and you want to skip these
|
||||
@@ -1196,11 +1390,11 @@ The string to be matched by <b>pcre_exec()</b>
|
||||
</b><br>
|
||||
<P>
|
||||
The subject string is passed to <b>pcre_exec()</b> as a pointer in
|
||||
<i>subject</i>, a length in <i>length</i>, and a starting byte offset in
|
||||
<i>startoffset</i>. In UTF-8 mode, the byte offset must point to the start of a
|
||||
UTF-8 character. Unlike the pattern string, the subject may contain binary zero
|
||||
bytes. When the starting offset is zero, the search for a match starts at the
|
||||
beginning of the subject, and this is by far the most common case.
|
||||
<i>subject</i>, a length (in bytes) in <i>length</i>, and a starting byte offset
|
||||
in <i>startoffset</i>. In UTF-8 mode, the byte offset must point to the start of
|
||||
a UTF-8 character. Unlike the pattern string, the subject may contain binary
|
||||
zero bytes. When the starting offset is zero, the search for a match starts at
|
||||
the beginning of the subject, and this is by far the most common case.
|
||||
</P>
|
||||
<P>
|
||||
A non-zero starting offset is useful when searching for another match in the
|
||||
@@ -1238,32 +1432,36 @@ a fragment of a pattern that picks out a substring. PCRE supports several other
|
||||
kinds of parenthesized subpattern that do not cause substrings to be captured.
|
||||
</P>
|
||||
<P>
|
||||
Captured substrings are returned to the caller via a vector of integer offsets
|
||||
whose address is passed in <i>ovector</i>. The number of elements in the vector
|
||||
is passed in <i>ovecsize</i>, which must be a non-negative number. <b>Note</b>:
|
||||
this argument is NOT the size of <i>ovector</i> in bytes.
|
||||
Captured substrings are returned to the caller via a vector of integers whose
|
||||
address is passed in <i>ovector</i>. The number of elements in the vector is
|
||||
passed in <i>ovecsize</i>, which must be a non-negative number. <b>Note</b>: this
|
||||
argument is NOT the size of <i>ovector</i> in bytes.
|
||||
</P>
|
||||
<P>
|
||||
The first two-thirds of the vector is used to pass back captured substrings,
|
||||
each substring using a pair of integers. The remaining third of the vector is
|
||||
used as workspace by <b>pcre_exec()</b> while matching capturing subpatterns,
|
||||
and is not available for passing back information. The length passed in
|
||||
and is not available for passing back information. The number passed in
|
||||
<i>ovecsize</i> should always be a multiple of three. If it is not, it is
|
||||
rounded down.
|
||||
</P>
|
||||
<P>
|
||||
When a match is successful, information about captured substrings is returned
|
||||
in pairs of integers, starting at the beginning of <i>ovector</i>, and
|
||||
continuing up to two-thirds of its length at the most. The first element of a
|
||||
pair is set to the offset of the first character in a substring, and the second
|
||||
is set to the offset of the first character after the end of a substring. The
|
||||
first pair, <i>ovector[0]</i> and <i>ovector[1]</i>, identify the portion of the
|
||||
subject string matched by the entire pattern. The next pair is used for the
|
||||
first capturing subpattern, and so on. The value returned by <b>pcre_exec()</b>
|
||||
is one more than the highest numbered pair that has been set. For example, if
|
||||
two substrings have been captured, the returned value is 3. If there are no
|
||||
capturing subpatterns, the return value from a successful match is 1,
|
||||
indicating that just the first pair of offsets has been set.
|
||||
continuing up to two-thirds of its length at the most. The first element of
|
||||
each pair is set to the byte offset of the first character in a substring, and
|
||||
the second is set to the byte offset of the first character after the end of a
|
||||
substring. <b>Note</b>: these values are always byte offsets, even in UTF-8
|
||||
mode. They are not character counts.
|
||||
</P>
|
||||
<P>
|
||||
The first pair of integers, <i>ovector[0]</i> and <i>ovector[1]</i>, identify the
|
||||
portion of the subject string matched by the entire pattern. The next pair is
|
||||
used for the first capturing subpattern, and so on. The value returned by
|
||||
<b>pcre_exec()</b> is one more than the highest numbered pair that has been set.
|
||||
For example, if two substrings have been captured, the returned value is 3. If
|
||||
there are no capturing subpatterns, the return value from a successful match is
|
||||
1, indicating that just the first pair of offsets has been set.
|
||||
</P>
|
||||
<P>
|
||||
If a capturing subpattern is matched repeatedly, it is the last portion of the
|
||||
@@ -1272,8 +1470,8 @@ string that it matched that is returned.
|
||||
<P>
|
||||
If the vector is too small to hold all the captured substring offsets, it is
|
||||
used as far as possible (up to two-thirds of its length), and the function
|
||||
returns a value of zero. In particular, if the substring offsets are not of
|
||||
interest, <b>pcre_exec()</b> may be called with <i>ovector</i> passed as NULL and
|
||||
returns a value of zero. If the substring offsets are not of interest,
|
||||
<b>pcre_exec()</b> may be called with <i>ovector</i> passed as NULL and
|
||||
<i>ovecsize</i> as zero. However, if the pattern contains back references and
|
||||
the <i>ovector</i> is not big enough to remember the related substrings, PCRE
|
||||
has to get additional memory for use during matching. Thus it is usually
|
||||
@@ -1334,7 +1532,7 @@ compiled in an environment of one endianness is run in an environment with the
|
||||
other endianness. This is the error that PCRE gives when the magic number is
|
||||
not present.
|
||||
<pre>
|
||||
PCRE_ERROR_UNKNOWN_NODE (-5)
|
||||
PCRE_ERROR_UNKNOWN_OPCODE (-5)
|
||||
</pre>
|
||||
While running the pattern match, an unknown item was encountered in the
|
||||
compiled pattern. This error could be caused by a bug in PCRE or by overwriting
|
||||
@@ -1359,12 +1557,6 @@ below). It is never returned by <b>pcre_exec()</b>.
|
||||
The backtracking limit, as specified by the <i>match_limit</i> field in a
|
||||
<b>pcre_extra</b> structure (or defaulted) was reached. See the description
|
||||
above.
|
||||
<pre>
|
||||
PCRE_ERROR_RECURSIONLIMIT (-21)
|
||||
</pre>
|
||||
The internal recursion limit, as specified by the <i>match_limit_recursion</i>
|
||||
field in a <b>pcre_extra</b> structure (or defaulted) was reached. See the
|
||||
description above.
|
||||
<pre>
|
||||
PCRE_ERROR_CALLOUT (-9)
|
||||
</pre>
|
||||
@@ -1403,6 +1595,19 @@ in PCRE or by overwriting of the compiled pattern.
|
||||
PCRE_ERROR_BADCOUNT (-15)
|
||||
</pre>
|
||||
This error is given if the value of the <i>ovecsize</i> argument is negative.
|
||||
<pre>
|
||||
PCRE_ERROR_RECURSIONLIMIT (-21)
|
||||
</pre>
|
||||
The internal recursion limit, as specified by the <i>match_limit_recursion</i>
|
||||
field in a <b>pcre_extra</b> structure (or defaulted) was reached. See the
|
||||
description above.
|
||||
<pre>
|
||||
PCRE_ERROR_BADNEWLINE (-23)
|
||||
</pre>
|
||||
An invalid combination of PCRE_NEWLINE_<i>xxx</i> options was given.
|
||||
</P>
|
||||
<P>
|
||||
Error numbers -16 to -20 and -22 are not used by <b>pcre_exec()</b>.
|
||||
</P>
|
||||
<br><a name="SEC15" href="#TOC1">EXTRACTING CAPTURED SUBSTRINGS BY NUMBER</a><br>
|
||||
<P>
|
||||
@@ -1457,7 +1662,7 @@ the string is placed in <i>buffer</i>, whose length is given by
|
||||
<i>buffersize</i>, while for <b>pcre_get_substring()</b> a new block of memory is
|
||||
obtained via <b>pcre_malloc</b>, and its address is returned via
|
||||
<i>stringptr</i>. The yield of the function is the length of the string, not
|
||||
including the terminating zero, or one of
|
||||
including the terminating zero, or one of these error codes:
|
||||
<pre>
|
||||
PCRE_ERROR_NOMEMORY (-6)
|
||||
</pre>
|
||||
@@ -1474,7 +1679,7 @@ and builds a list of pointers to them. All this is done in a single block of
|
||||
memory that is obtained via <b>pcre_malloc</b>. The address of the memory block
|
||||
is returned via <i>listptr</i>, which is also the start of the list of string
|
||||
pointers. The end of the list is marked by a NULL pointer. The yield of the
|
||||
function is zero if all went well, or
|
||||
function is zero if all went well, or the error code
|
||||
<pre>
|
||||
PCRE_ERROR_NOMEMORY (-6)
|
||||
</pre>
|
||||
@@ -1520,7 +1725,7 @@ provided.
|
||||
To extract a substring by name, you first have to find associated number.
|
||||
For example, for this pattern
|
||||
<pre>
|
||||
(a+)b(?P<xxx>\d+)...
|
||||
(a+)b(?<xxx>\d+)...
|
||||
</pre>
|
||||
the number of the subpattern called "xxx" is 2. If the name is known to be
|
||||
unique (PCRE_DUPNAMES was not set), you can find the number from the name by
|
||||
@@ -1548,8 +1753,15 @@ translation table.
|
||||
</P>
|
||||
<P>
|
||||
These functions call <b>pcre_get_stringnumber()</b>, and if it succeeds, they
|
||||
then call <i>pcre_copy_substring()</i> or <i>pcre_get_substring()</i>, as
|
||||
appropriate.
|
||||
then call <b>pcre_copy_substring()</b> or <b>pcre_get_substring()</b>, as
|
||||
appropriate. <b>NOTE:</b> If PCRE_DUPNAMES is set and there are duplicate names,
|
||||
the behaviour may not be what you want (see the next section).
|
||||
</P>
|
||||
<P>
|
||||
<b>Warning:</b> If the pattern uses the "(?|" feature to set up multiple
|
||||
subpatterns with the same number, you cannot use names to distinguish them,
|
||||
because names are not included in the compiled code. The matching process uses
|
||||
only numbers.
|
||||
</P>
|
||||
<br><a name="SEC17" href="#TOC1">DUPLICATE SUBPATTERN NAMES</a><br>
|
||||
<P>
|
||||
@@ -1562,23 +1774,27 @@ are not required to be unique. Normally, patterns with duplicate names are such
|
||||
that in any one match, only one of the named subpatterns participates. An
|
||||
example is shown in the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
documentation. When duplicates are present, <b>pcre_copy_named_substring()</b>
|
||||
and <b>pcre_get_named_substring()</b> return the first substring corresponding
|
||||
to the given name that is set. If none are set, an empty string is returned.
|
||||
The <b>pcre_get_stringnumber()</b> function returns one of the numbers that are
|
||||
associated with the name, but it is not defined which it is.
|
||||
<br>
|
||||
<br>
|
||||
documentation.
|
||||
</P>
|
||||
<P>
|
||||
When duplicates are present, <b>pcre_copy_named_substring()</b> and
|
||||
<b>pcre_get_named_substring()</b> return the first substring corresponding to
|
||||
the given name that is set. If none are set, PCRE_ERROR_NOSUBSTRING (-7) is
|
||||
returned; no data is returned. The <b>pcre_get_stringnumber()</b> function
|
||||
returns one of the numbers that are associated with the name, but it is not
|
||||
defined which it is.
|
||||
</P>
|
||||
<P>
|
||||
If you want to get full details of all captured substrings for a given name,
|
||||
you must use the <b>pcre_get_stringtable_entries()</b> function. The first
|
||||
argument is the compiled pattern, and the second is the name. The third and
|
||||
fourth are pointers to variables which are updated by the function. After it
|
||||
has run, they point to the first and last entries in the name-to-number table
|
||||
for the given name. The function itself returns the length of each entry, or
|
||||
PCRE_ERROR_NOSUBSTRING if there are none. The format of the table is described
|
||||
above in the section entitled <i>Information about a pattern</i>. Given all the
|
||||
relevant entries for the name, you can extract each of their numbers, and hence
|
||||
the captured data, if any.
|
||||
PCRE_ERROR_NOSUBSTRING (-7) if there are none. The format of the table is
|
||||
described above in the section entitled <i>Information about a pattern</i>.
|
||||
Given all the relevant entries for the name, you can extract each of their
|
||||
numbers, and hence the captured data, if any.
|
||||
</P>
|
||||
<br><a name="SEC18" href="#TOC1">FINDING ALL POSSIBLE MATCHES</a><br>
|
||||
<P>
|
||||
@@ -1608,11 +1824,12 @@ will yield PCRE_ERROR_NOMATCH.
|
||||
</P>
|
||||
<P>
|
||||
The function <b>pcre_dfa_exec()</b> is called to match a subject string against
|
||||
a compiled pattern, using a "DFA" matching algorithm. This has different
|
||||
characteristics to the normal algorithm, and is not compatible with Perl. Some
|
||||
of the features of PCRE patterns are not supported. Nevertheless, there are
|
||||
times when this kind of matching can be useful. For a discussion of the two
|
||||
matching algorithms, see the
|
||||
a compiled pattern, using a matching algorithm that scans the subject string
|
||||
just once, and does not backtrack. This has different characteristics to the
|
||||
normal algorithm, and is not compatible with Perl. Some of the features of PCRE
|
||||
patterns are not supported. Nevertheless, there are times when this kind of
|
||||
matching can be useful. For a discussion of the two matching algorithms, see
|
||||
the
|
||||
<a href="pcrematching.html"><b>pcrematching</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
@@ -1671,9 +1888,9 @@ matching string.
|
||||
PCRE_DFA_SHORTEST
|
||||
</pre>
|
||||
Setting the PCRE_DFA_SHORTEST option causes the matching algorithm to stop as
|
||||
soon as it has found one match. Because of the way the DFA algorithm works,
|
||||
this is necessarily the shortest possible match at the first possible matching
|
||||
point in the subject string.
|
||||
soon as it has found one match. Because of the way the alternative algorithm
|
||||
works, this is necessarily the shortest possible match at the first possible
|
||||
matching point in the subject string.
|
||||
<pre>
|
||||
PCRE_DFA_RESTART
|
||||
</pre>
|
||||
@@ -1711,10 +1928,10 @@ the three matched strings are
|
||||
On success, the yield of the function is a number greater than zero, which is
|
||||
the number of matched substrings. The substrings themselves are returned in
|
||||
<i>ovector</i>. Each string uses two elements; the first is the offset to the
|
||||
start, and the second is the offset to the end. All the strings have the same
|
||||
start offset. (Space could have been saved by giving this only once, but it was
|
||||
decided to retain some compatibility with the way <b>pcre_exec()</b> returns
|
||||
data, even though the meaning of the strings is different.)
|
||||
start, and the second is the offset to the end. In fact, all the strings have
|
||||
the same start offset. (Space could have been saved by giving this only once,
|
||||
but it was decided to retain some compatibility with the way <b>pcre_exec()</b>
|
||||
returns data, even though the meaning of the strings is different.)
|
||||
</P>
|
||||
<P>
|
||||
The strings are returned in reverse order of length; that is, the longest
|
||||
@@ -1740,8 +1957,9 @@ that it does not support, for instance, the use of \C or a back reference.
|
||||
<pre>
|
||||
PCRE_ERROR_DFA_UCOND (-17)
|
||||
</pre>
|
||||
This return is given if <b>pcre_dfa_exec()</b> encounters a condition item in a
|
||||
pattern that uses a back reference for the condition. This is not supported.
|
||||
This return is given if <b>pcre_dfa_exec()</b> encounters a condition item that
|
||||
uses a back reference for the condition, or a test for recursion in a specific
|
||||
group. These are not supported.
|
||||
<pre>
|
||||
PCRE_ERROR_DFA_UMLIMIT (-18)
|
||||
</pre>
|
||||
@@ -1761,10 +1979,27 @@ recursively, using private vectors for <i>ovector</i> and <i>workspace</i>. This
|
||||
error is given if the output vector is not large enough. This should be
|
||||
extremely rare, as a vector of size 1000 is used.
|
||||
</P>
|
||||
<br><a name="SEC20" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
Last updated: 08 June 2006
|
||||
<b>pcrebuild</b>(3), <b>pcrecallout</b>(3), <b>pcrecpp(3)</b>(3),
|
||||
<b>pcrematching</b>(3), <b>pcrepartial</b>(3), <b>pcreposix</b>(3),
|
||||
<b>pcreprecompile</b>(3), <b>pcresample</b>(3), <b>pcrestack</b>(3).
|
||||
</P>
|
||||
<br><a name="SEC21" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC22" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 11 April 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -18,26 +18,39 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC3" href="#SEC3">UTF-8 SUPPORT</a>
|
||||
<li><a name="TOC4" href="#SEC4">UNICODE CHARACTER PROPERTY SUPPORT</a>
|
||||
<li><a name="TOC5" href="#SEC5">CODE VALUE OF NEWLINE</a>
|
||||
<li><a name="TOC6" href="#SEC6">BUILDING SHARED AND STATIC LIBRARIES</a>
|
||||
<li><a name="TOC7" href="#SEC7">POSIX MALLOC USAGE</a>
|
||||
<li><a name="TOC8" href="#SEC8">HANDLING VERY LARGE PATTERNS</a>
|
||||
<li><a name="TOC9" href="#SEC9">AVOIDING EXCESSIVE STACK USAGE</a>
|
||||
<li><a name="TOC10" href="#SEC10">LIMITING PCRE RESOURCE USAGE</a>
|
||||
<li><a name="TOC11" href="#SEC11">USING EBCDIC CODE</a>
|
||||
<li><a name="TOC6" href="#SEC6">WHAT \R MATCHES</a>
|
||||
<li><a name="TOC7" href="#SEC7">BUILDING SHARED AND STATIC LIBRARIES</a>
|
||||
<li><a name="TOC8" href="#SEC8">POSIX MALLOC USAGE</a>
|
||||
<li><a name="TOC9" href="#SEC9">HANDLING VERY LARGE PATTERNS</a>
|
||||
<li><a name="TOC10" href="#SEC10">AVOIDING EXCESSIVE STACK USAGE</a>
|
||||
<li><a name="TOC11" href="#SEC11">LIMITING PCRE RESOURCE USAGE</a>
|
||||
<li><a name="TOC12" href="#SEC12">CREATING CHARACTER TABLES AT BUILD TIME</a>
|
||||
<li><a name="TOC13" href="#SEC13">USING EBCDIC CODE</a>
|
||||
<li><a name="TOC14" href="#SEC14">PCREGREP OPTIONS FOR COMPRESSED FILE SUPPORT</a>
|
||||
<li><a name="TOC15" href="#SEC15">PCRETEST OPTION FOR LIBREADLINE SUPPORT</a>
|
||||
<li><a name="TOC16" href="#SEC16">SEE ALSO</a>
|
||||
<li><a name="TOC17" href="#SEC17">AUTHOR</a>
|
||||
<li><a name="TOC18" href="#SEC18">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PCRE BUILD-TIME OPTIONS</a><br>
|
||||
<P>
|
||||
This document describes the optional features of PCRE that can be selected when
|
||||
the library is compiled. They are all selected, or deselected, by providing
|
||||
options to the <b>configure</b> script that is run before the <b>make</b>
|
||||
command. The complete list of options for <b>configure</b> (which includes the
|
||||
standard ones such as the selection of the installation directory) can be
|
||||
obtained by running
|
||||
the library is compiled. It assumes use of the <b>configure</b> script, where
|
||||
the optional features are selected or deselected by providing options to
|
||||
<b>configure</b> before running the <b>make</b> command. However, the same
|
||||
options can be selected in both Unix-like and non-Unix-like environments using
|
||||
the GUI facility of <b>CMakeSetup</b> if you are using <b>CMake</b> instead of
|
||||
<b>configure</b> to build PCRE.
|
||||
</P>
|
||||
<P>
|
||||
The complete list of options for <b>configure</b> (which includes the standard
|
||||
ones such as the selection of the installation directory) can be obtained by
|
||||
running
|
||||
<pre>
|
||||
./configure --help
|
||||
</pre>
|
||||
The following sections describe certain options whose names begin with --enable
|
||||
or --disable. These settings specify changes to the defaults for the
|
||||
The following sections include descriptions of options whose names begin with
|
||||
--enable or --disable. These settings specify changes to the defaults for the
|
||||
<b>configure</b> command. Because of the way that <b>configure</b> works,
|
||||
--enable and --disable always come in pairs, so the complementary option always
|
||||
exists as well, but as it specifies the default, it is not described.
|
||||
@@ -54,7 +67,7 @@ to the <b>configure</b> command.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">UTF-8 SUPPORT</a><br>
|
||||
<P>
|
||||
To build PCRE with support for UTF-8 character strings, add
|
||||
To build PCRE with support for UTF-8 Unicode character strings, add
|
||||
<pre>
|
||||
--enable-utf8
|
||||
</pre>
|
||||
@@ -63,6 +76,13 @@ strings as UTF-8. As well as compiling PCRE with this option, you also have
|
||||
have to set the PCRE_UTF8 option when you call the <b>pcre_compile()</b>
|
||||
function.
|
||||
</P>
|
||||
<P>
|
||||
If you set --enable-utf8 when compiling in an EBCDIC environment, PCRE expects
|
||||
its input to be either ASCII or UTF-8 (depending on the runtime option). It is
|
||||
not possible to support both EBCDIC and UTF-8 codes in the same version of the
|
||||
library. Consequently, --enable-utf8 and --enable-ebcdic are mutually
|
||||
exclusive.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">UNICODE CHARACTER PROPERTY SUPPORT</a><br>
|
||||
<P>
|
||||
UTF-8 support allows PCRE to process character values greater than 255 in the
|
||||
@@ -77,17 +97,17 @@ to the <b>configure</b> command. This implies UTF-8 support, even if you have
|
||||
not explicitly requested it.
|
||||
</P>
|
||||
<P>
|
||||
Including Unicode property support adds around 90K of tables to the PCRE
|
||||
library, approximately doubling its size. Only the general category properties
|
||||
such as <i>Lu</i> and <i>Nd</i> are supported. Details are given in the
|
||||
Including Unicode property support adds around 30K of tables to the PCRE
|
||||
library. Only the general category properties such as <i>Lu</i> and <i>Nd</i> are
|
||||
supported. Details are given in the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">CODE VALUE OF NEWLINE</a><br>
|
||||
<P>
|
||||
By default, PCRE interprets character 10 (linefeed, LF) as indicating the end
|
||||
By default, PCRE interprets the linefeed (LF) character as indicating the end
|
||||
of a line. This is the normal newline character on Unix-like systems. You can
|
||||
compile PCRE to use character 13 (carriage return, CR) instead, by adding
|
||||
compile PCRE to use carriage return (CR) instead, by adding
|
||||
<pre>
|
||||
--enable-newline-is-cr
|
||||
</pre>
|
||||
@@ -100,11 +120,34 @@ character sequence CRLF. If you want this, add
|
||||
<pre>
|
||||
--enable-newline-is-crlf
|
||||
</pre>
|
||||
to the <b>configure</b> command. Whatever line ending convention is selected
|
||||
when PCRE is built can be overridden when the library functions are called. At
|
||||
build time it is conventional to use the standard for your operating system.
|
||||
to the <b>configure</b> command. There is a fourth option, specified by
|
||||
<pre>
|
||||
--enable-newline-is-anycrlf
|
||||
</pre>
|
||||
which causes PCRE to recognize any of the three sequences CR, LF, or CRLF as
|
||||
indicating a line ending. Finally, a fifth option, specified by
|
||||
<pre>
|
||||
--enable-newline-is-any
|
||||
</pre>
|
||||
causes PCRE to recognize any Unicode newline sequence.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">BUILDING SHARED AND STATIC LIBRARIES</a><br>
|
||||
<P>
|
||||
Whatever line ending convention is selected when PCRE is built can be
|
||||
overridden when the library functions are called. At build time it is
|
||||
conventional to use the standard for your operating system.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">WHAT \R MATCHES</a><br>
|
||||
<P>
|
||||
By default, the sequence \R in a pattern matches any Unicode newline sequence,
|
||||
whatever has been selected as the line ending sequence. If you specify
|
||||
<pre>
|
||||
--enable-bsr-anycrlf
|
||||
</pre>
|
||||
the default is changed so that \R matches only CR, LF, or CRLF. Whatever is
|
||||
selected when PCRE is built can be overridden when the library functions are
|
||||
called.
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">BUILDING SHARED AND STATIC LIBRARIES</a><br>
|
||||
<P>
|
||||
The PCRE building process uses <b>libtool</b> to build both shared and static
|
||||
Unix libraries by default. You can suppress one of these by adding one of
|
||||
@@ -114,7 +157,7 @@ Unix libraries by default. You can suppress one of these by adding one of
|
||||
</pre>
|
||||
to the <b>configure</b> command, as required.
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">POSIX MALLOC USAGE</a><br>
|
||||
<br><a name="SEC8" href="#TOC1">POSIX MALLOC USAGE</a><br>
|
||||
<P>
|
||||
When PCRE is called through the POSIX interface (see the
|
||||
<a href="pcreposix.html"><b>pcreposix</b></a>
|
||||
@@ -130,7 +173,7 @@ such as
|
||||
</pre>
|
||||
to the <b>configure</b> command.
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">HANDLING VERY LARGE PATTERNS</a><br>
|
||||
<br><a name="SEC9" href="#TOC1">HANDLING VERY LARGE PATTERNS</a><br>
|
||||
<P>
|
||||
Within a compiled pattern, offset values are used to point from one part to
|
||||
another (for example, from an opening parenthesis to an alternation
|
||||
@@ -146,12 +189,7 @@ to the <b>configure</b> command. The value given must be 2, 3, or 4. Using
|
||||
longer offsets slows down the operation of PCRE because it has to load
|
||||
additional bytes when handling them.
|
||||
</P>
|
||||
<P>
|
||||
If you build PCRE with an increased link size, test 2 (and test 5 if you are
|
||||
using UTF-8) will fail. Part of the output of these tests is a representation
|
||||
of the compiled pattern, and this changes with the link size.
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">AVOIDING EXCESSIVE STACK USAGE</a><br>
|
||||
<br><a name="SEC10" href="#TOC1">AVOIDING EXCESSIVE STACK USAGE</a><br>
|
||||
<P>
|
||||
When matching with the <b>pcre_exec()</b> function, PCRE implements backtracking
|
||||
by making recursive calls to an internal function called <b>match()</b>. In
|
||||
@@ -169,15 +207,20 @@ build a version of PCRE that works this way, add
|
||||
</pre>
|
||||
to the <b>configure</b> command. With this configuration, PCRE will use the
|
||||
<b>pcre_stack_malloc</b> and <b>pcre_stack_free</b> variables to call memory
|
||||
management functions. Separate functions are provided because the usage is very
|
||||
predictable: the block sizes requested are always the same, and the blocks are
|
||||
always freed in reverse order. A calling program might be able to implement
|
||||
optimized functions that perform better than the standard <b>malloc()</b> and
|
||||
<b>free()</b> functions. PCRE runs noticeably more slowly when built in this
|
||||
way. This option affects only the <b>pcre_exec()</b> function; it is not
|
||||
relevant for the the <b>pcre_dfa_exec()</b> function.
|
||||
management functions. By default these point to <b>malloc()</b> and
|
||||
<b>free()</b>, but you can replace the pointers so that your own functions are
|
||||
used.
|
||||
</P>
|
||||
<br><a name="SEC10" href="#TOC1">LIMITING PCRE RESOURCE USAGE</a><br>
|
||||
<P>
|
||||
Separate functions are provided rather than using <b>pcre_malloc</b> and
|
||||
<b>pcre_free</b> because the usage is very predictable: the block sizes
|
||||
requested are always the same, and the blocks are always freed in reverse
|
||||
order. A calling program might be able to implement optimized functions that
|
||||
perform better than <b>malloc()</b> and <b>free()</b>. PCRE runs noticeably more
|
||||
slowly when built in this way. This option affects only the <b>pcre_exec()</b>
|
||||
function; it is not relevant for the the <b>pcre_dfa_exec()</b> function.
|
||||
</P>
|
||||
<br><a name="SEC11" href="#TOC1">LIMITING PCRE RESOURCE USAGE</a><br>
|
||||
<P>
|
||||
Internally, PCRE has a function called <b>match()</b>, which it calls repeatedly
|
||||
(sometimes recursively) when matching a pattern with the <b>pcre_exec()</b>
|
||||
@@ -206,20 +249,100 @@ constraints. However, you can set a lower limit by adding, for example,
|
||||
</pre>
|
||||
to the <b>configure</b> command. This value can also be overridden at run time.
|
||||
</P>
|
||||
<br><a name="SEC11" href="#TOC1">USING EBCDIC CODE</a><br>
|
||||
<br><a name="SEC12" href="#TOC1">CREATING CHARACTER TABLES AT BUILD TIME</a><br>
|
||||
<P>
|
||||
PCRE uses fixed tables for processing characters whose code values are less
|
||||
than 256. By default, PCRE is built with a set of tables that are distributed
|
||||
in the file <i>pcre_chartables.c.dist</i>. These tables are for ASCII codes
|
||||
only. If you add
|
||||
<pre>
|
||||
--enable-rebuild-chartables
|
||||
</pre>
|
||||
to the <b>configure</b> command, the distributed tables are no longer used.
|
||||
Instead, a program called <b>dftables</b> is compiled and run. This outputs the
|
||||
source for new set of tables, created in the default locale of your C runtime
|
||||
system. (This method of replacing the tables does not work if you are cross
|
||||
compiling, because <b>dftables</b> is run on the local host. If you need to
|
||||
create alternative tables when cross compiling, you will have to do so "by
|
||||
hand".)
|
||||
</P>
|
||||
<br><a name="SEC13" href="#TOC1">USING EBCDIC CODE</a><br>
|
||||
<P>
|
||||
PCRE assumes by default that it will run in an environment where the character
|
||||
code is ASCII (or Unicode, which is a superset of ASCII). PCRE can, however, be
|
||||
compiled to run in an EBCDIC environment by adding
|
||||
code is ASCII (or Unicode, which is a superset of ASCII). This is the case for
|
||||
most computer operating systems. PCRE can, however, be compiled to run in an
|
||||
EBCDIC environment by adding
|
||||
<pre>
|
||||
--enable-ebcdic
|
||||
</pre>
|
||||
to the <b>configure</b> command.
|
||||
to the <b>configure</b> command. This setting implies
|
||||
--enable-rebuild-chartables. You should only use it if you know that you are in
|
||||
an EBCDIC environment (for example, an IBM mainframe operating system). The
|
||||
--enable-ebcdic option is incompatible with --enable-utf8.
|
||||
</P>
|
||||
<br><a name="SEC14" href="#TOC1">PCREGREP OPTIONS FOR COMPRESSED FILE SUPPORT</a><br>
|
||||
<P>
|
||||
By default, <b>pcregrep</b> reads all files as plain text. You can build it so
|
||||
that it recognizes files whose names end in <b>.gz</b> or <b>.bz2</b>, and reads
|
||||
them with <b>libz</b> or <b>libbz2</b>, respectively, by adding one or both of
|
||||
<pre>
|
||||
--enable-pcregrep-libz
|
||||
--enable-pcregrep-libbz2
|
||||
</pre>
|
||||
to the <b>configure</b> command. These options naturally require that the
|
||||
relevant libraries are installed on your system. Configuration will fail if
|
||||
they are not.
|
||||
</P>
|
||||
<br><a name="SEC15" href="#TOC1">PCRETEST OPTION FOR LIBREADLINE SUPPORT</a><br>
|
||||
<P>
|
||||
If you add
|
||||
<pre>
|
||||
--enable-pcretest-libreadline
|
||||
</pre>
|
||||
to the <b>configure</b> command, <b>pcretest</b> is linked with the
|
||||
<b>libreadline</b> library, and when its input is from a terminal, it reads it
|
||||
using the <b>readline()</b> function. This provides line-editing and history
|
||||
facilities. Note that <b>libreadline</b> is GPL-licenced, so if you distribute a
|
||||
binary of <b>pcretest</b> linked in this way, there may be licensing issues.
|
||||
</P>
|
||||
<P>
|
||||
Last updated: 06 June 2006
|
||||
Setting this option causes the <b>-lreadline</b> option to be added to the
|
||||
<b>pcretest</b> build. In many operating environments with a sytem-installed
|
||||
<b>libreadline</b> this is sufficient. However, in some environments (e.g.
|
||||
if an unmodified distribution version of readline is in use), some extra
|
||||
configuration may be necessary. The INSTALL file for <b>libreadline</b> says
|
||||
this:
|
||||
<pre>
|
||||
"Readline uses the termcap functions, but does not link with the
|
||||
termcap or curses library itself, allowing applications which link
|
||||
with readline the to choose an appropriate library."
|
||||
</pre>
|
||||
If your environment has not been set up so that an appropriate library is
|
||||
automatically included, you may need to add something like
|
||||
<pre>
|
||||
LIBS="-ncurses"
|
||||
</pre>
|
||||
immediately before the <b>configure</b> command.
|
||||
</P>
|
||||
<br><a name="SEC16" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
<b>pcreapi</b>(3), <b>pcre_config</b>(3).
|
||||
</P>
|
||||
<br><a name="SEC17" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC18" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 17 March 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -17,6 +17,8 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC2" href="#SEC2">MISSING CALLOUTS</a>
|
||||
<li><a name="TOC3" href="#SEC3">THE CALLOUT INTERFACE</a>
|
||||
<li><a name="TOC4" href="#SEC4">RETURN VALUES</a>
|
||||
<li><a name="TOC5" href="#SEC5">AUTHOR</a>
|
||||
<li><a name="TOC6" href="#SEC6">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PCRE CALLOUTS</a><br>
|
||||
<P>
|
||||
@@ -35,7 +37,7 @@ function is to be called. Different callout points can be identified by putting
|
||||
a number less than 256 after the letter C. The default value is zero.
|
||||
For example, this pattern has two callout points:
|
||||
<pre>
|
||||
(?C1)\deabc(?C2)def
|
||||
(?C1)abc(?C2)def
|
||||
</pre>
|
||||
If the PCRE_AUTO_CALLOUT option bit is set when <b>pcre_compile()</b> is called,
|
||||
PCRE automatically inserts callouts, all with number 255, before each item in
|
||||
@@ -60,7 +62,8 @@ trying to optimize the performance of a particular pattern.
|
||||
<br><a name="SEC2" href="#TOC1">MISSING CALLOUTS</a><br>
|
||||
<P>
|
||||
You should be aware that, because of optimizations in the way PCRE matches
|
||||
patterns, callouts sometimes do not happen. For example, if the pattern is
|
||||
patterns by default, callouts sometimes do not happen. For example, if the
|
||||
pattern is
|
||||
<pre>
|
||||
ab(?C4)cd
|
||||
</pre>
|
||||
@@ -69,6 +72,12 @@ string is "abyz", the lack of "d" means that matching doesn't ever start, and
|
||||
the callout is never reached. However, with "abyd", though the result is still
|
||||
no match, the callout is obeyed.
|
||||
</P>
|
||||
<P>
|
||||
You can disable these optimizations by passing the PCRE_NO_START_OPTIMIZE
|
||||
option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>. This slows down the
|
||||
matching process, but does ensure that callouts such as the example above are
|
||||
obeyed.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">THE CALLOUT INTERFACE</a><br>
|
||||
<P>
|
||||
During matching, when PCRE reaches a callout point, the external function
|
||||
@@ -113,10 +122,12 @@ The <i>subject</i> and <i>subject_length</i> fields contain copies of the values
|
||||
that were passed to <b>pcre_exec()</b>.
|
||||
</P>
|
||||
<P>
|
||||
The <i>start_match</i> field contains the offset within the subject at which the
|
||||
current match attempt started. If the pattern is not anchored, the callout
|
||||
function may be called several times from the same point in the pattern for
|
||||
different starting points in the subject.
|
||||
The <i>start_match</i> field normally contains the offset within the subject at
|
||||
which the current match attempt started. However, if the escape sequence \K
|
||||
has been encountered, this value is changed to reflect the modified starting
|
||||
point. If the pattern is not anchored, the callout function may be called
|
||||
several times from the same point in the pattern for different starting points
|
||||
in the subject.
|
||||
</P>
|
||||
<P>
|
||||
The <i>current_position</i> field contains the offset within the subject of the
|
||||
@@ -177,10 +188,21 @@ values. In particular, PCRE_ERROR_NOMATCH forces a standard "no match" failure.
|
||||
The error number PCRE_ERROR_CALLOUT is reserved for use by callout functions;
|
||||
it will never be used by PCRE itself.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Last updated: 28 February 2005
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 15 March 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2005 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -17,8 +17,9 @@ DIFFERENCES BETWEEN PCRE AND PERL
|
||||
</b><br>
|
||||
<P>
|
||||
This document describes the differences in the ways that PCRE and Perl handle
|
||||
regular expressions. The differences described here are with respect to Perl
|
||||
5.8.
|
||||
regular expressions. The differences described here are mainly with respect to
|
||||
Perl 5.8, though PCRE versions 7.0 and later contain some features that are
|
||||
expected to be in the forthcoming Perl 5.10.
|
||||
</P>
|
||||
<P>
|
||||
1. PCRE has only a subset of Perl's UTF-8 and Unicode support. Details of what
|
||||
@@ -76,20 +77,34 @@ following examples:
|
||||
The \Q...\E sequence is recognized both inside and outside character classes.
|
||||
</P>
|
||||
<P>
|
||||
8. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
|
||||
constructions. However, there is support for recursive patterns using the
|
||||
non-Perl items (?R), (?number), and (?P>name). Also, the PCRE "callout" feature
|
||||
allows an external function to be called during pattern matching. See the
|
||||
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 will be in Perl 5.10. Also, the PCRE "callout"
|
||||
feature allows an external function to be called during pattern matching. See
|
||||
the
|
||||
<a href="pcrecallout.html"><b>pcrecallout</b></a>
|
||||
documentation for details.
|
||||
</P>
|
||||
<P>
|
||||
9. There are some differences that are concerned with the settings of captured
|
||||
9. Subpatterns that are called recursively or as "subroutines" are always
|
||||
treated as atomic groups in PCRE. This is like Python, but unlike Perl.
|
||||
</P>
|
||||
<P>
|
||||
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".
|
||||
</P>
|
||||
<P>
|
||||
10. PCRE provides some extensions to the Perl regular expression facilities:
|
||||
11. PCRE does support Perl 5.10's backtracking verbs (*ACCEPT), (*FAIL), (*F),
|
||||
(*COMMIT), (*PRUNE), (*SKIP), and (*THEN), but only in the forms without an
|
||||
argument. PCRE does not support (*MARK). If (*ACCEPT) is within capturing
|
||||
parentheses, PCRE does not set that capture group; this is different to Perl.
|
||||
</P>
|
||||
<P>
|
||||
12. PCRE provides some extensions to the Perl regular expression facilities.
|
||||
Perl 5.10 will include new features that are not in earlier versions, some of
|
||||
which (such as named parentheses) have been in PCRE for some time. This list is
|
||||
with respect to Perl 5.10:
|
||||
<br>
|
||||
<br>
|
||||
(a) Although lookbehind assertions must match fixed length strings, each
|
||||
@@ -102,8 +117,8 @@ meta-character matches only at the very end of the string.
|
||||
<br>
|
||||
<br>
|
||||
(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
|
||||
meaning is faulted. Otherwise, like Perl, the backslash is ignored. (Perl can
|
||||
be made to issue a warning.)
|
||||
meaning is faulted. Otherwise, like Perl, the backslash is quietly ignored.
|
||||
(Perl can be made to issue a warning.)
|
||||
<br>
|
||||
<br>
|
||||
(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
|
||||
@@ -119,38 +134,46 @@ only at the first matching position in the subject string.
|
||||
options for <b>pcre_exec()</b> have no Perl equivalents.
|
||||
<br>
|
||||
<br>
|
||||
(g) The (?R), (?number), and (?P>name) constructs allows for recursive pattern
|
||||
matching (Perl can do this using the (?p{code}) construct, which PCRE cannot
|
||||
support.)
|
||||
(g) The \R escape sequence can be restricted to match only CR, LF, or CRLF
|
||||
by the PCRE_BSR_ANYCRLF option.
|
||||
<br>
|
||||
<br>
|
||||
(h) PCRE supports named capturing substrings, using the Python syntax.
|
||||
(h) The callout facility is PCRE-specific.
|
||||
<br>
|
||||
<br>
|
||||
(i) PCRE supports the possessive quantifier "++" syntax, taken from Sun's Java
|
||||
package.
|
||||
(i) The partial matching facility is PCRE-specific.
|
||||
<br>
|
||||
<br>
|
||||
(j) The (R) condition, for testing recursion, is a PCRE extension.
|
||||
<br>
|
||||
<br>
|
||||
(k) The callout facility is PCRE-specific.
|
||||
<br>
|
||||
<br>
|
||||
(l) The partial matching facility is PCRE-specific.
|
||||
<br>
|
||||
<br>
|
||||
(m) Patterns compiled by PCRE can be saved and re-used at a later time, even on
|
||||
(j) Patterns compiled by PCRE can be saved and re-used at a later time, even on
|
||||
different hosts that have the other endianness.
|
||||
<br>
|
||||
<br>
|
||||
(n) The alternative matching function (<b>pcre_dfa_exec()</b>) matches in a
|
||||
(k) The alternative matching function (<b>pcre_dfa_exec()</b>) matches in a
|
||||
different way and is not Perl-compatible.
|
||||
</P>
|
||||
<P>
|
||||
Last updated: 06 June 2006
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<br>
|
||||
(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.
|
||||
</P>
|
||||
<br><b>
|
||||
AUTHOR
|
||||
</b><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><b>
|
||||
REVISION
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 11 September 2007
|
||||
<br>
|
||||
Copyright © 1997-2007 University of Cambridge.
|
||||
<br>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -16,20 +16,20 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC1" href="#SEC1">SYNOPSIS OF C++ WRAPPER</a>
|
||||
<li><a name="TOC2" href="#SEC2">DESCRIPTION</a>
|
||||
<li><a name="TOC3" href="#SEC3">MATCHING INTERFACE</a>
|
||||
<li><a name="TOC4" href="#SEC4">PARTIAL MATCHES</a>
|
||||
<li><a name="TOC5" href="#SEC5">UTF-8 AND THE MATCHING INTERFACE</a>
|
||||
<li><a name="TOC6" href="#SEC6">PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE</a>
|
||||
<li><a name="TOC7" href="#SEC7">SCANNING TEXT INCREMENTALLY</a>
|
||||
<li><a name="TOC8" href="#SEC8">PARSING HEX/OCTAL/C-RADIX NUMBERS</a>
|
||||
<li><a name="TOC9" href="#SEC9">REPLACING PARTS OF STRINGS</a>
|
||||
<li><a name="TOC10" href="#SEC10">AUTHOR</a>
|
||||
<li><a name="TOC4" href="#SEC4">QUOTING METACHARACTERS</a>
|
||||
<li><a name="TOC5" href="#SEC5">PARTIAL MATCHES</a>
|
||||
<li><a name="TOC6" href="#SEC6">UTF-8 AND THE MATCHING INTERFACE</a>
|
||||
<li><a name="TOC7" href="#SEC7">PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE</a>
|
||||
<li><a name="TOC8" href="#SEC8">SCANNING TEXT INCREMENTALLY</a>
|
||||
<li><a name="TOC9" href="#SEC9">PARSING HEX/OCTAL/C-RADIX NUMBERS</a>
|
||||
<li><a name="TOC10" href="#SEC10">REPLACING PARTS OF STRINGS</a>
|
||||
<li><a name="TOC11" href="#SEC11">AUTHOR</a>
|
||||
<li><a name="TOC12" href="#SEC12">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SYNOPSIS OF C++ WRAPPER</a><br>
|
||||
<P>
|
||||
<b>#include <pcrecpp.h></b>
|
||||
</P>
|
||||
<P>
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">DESCRIPTION</a><br>
|
||||
<P>
|
||||
The C++ wrapper for PCRE was provided by Google Inc. Some additional
|
||||
@@ -101,16 +101,43 @@ The function returns true iff all of the following conditions are satisfied:
|
||||
|
||||
c. The "i"th argument has a suitable type for holding the
|
||||
string captured as the "i"th sub-pattern. If you pass in
|
||||
NULL for the "i"th argument, or pass fewer arguments than
|
||||
void * NULL for the "i"th argument, or a non-void * NULL
|
||||
of the correct type, or pass fewer arguments than the
|
||||
number of sub-patterns, "i"th captured sub-pattern is
|
||||
ignored.
|
||||
</pre>
|
||||
CAVEAT: An optional sub-pattern that does not exist in the matched
|
||||
string is assigned the empty string. Therefore, the following will
|
||||
return false (because the empty string is not a valid number):
|
||||
<pre>
|
||||
int number;
|
||||
pcrecpp::RE::FullMatch("abc", "[a-z]+(\\d+)?", &number);
|
||||
</pre>
|
||||
The matching interface supports at most 16 arguments per call.
|
||||
If you need more, consider using the more general interface
|
||||
<b>pcrecpp::RE::DoMatch</b>. See <b>pcrecpp.h</b> for the signature for
|
||||
<b>DoMatch</b>.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">PARTIAL MATCHES</a><br>
|
||||
<P>
|
||||
NOTE: Do not use <b>no_arg</b>, which is used internally to mark the end of a
|
||||
list of optional arguments, as a placeholder for missing arguments, as this can
|
||||
lead to segfaults.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">QUOTING METACHARACTERS</a><br>
|
||||
<P>
|
||||
You can use the "QuoteMeta" operation to insert backslashes before all
|
||||
potentially meaningful characters in a string. The returned string, used as a
|
||||
regular expression, will exactly match the original string.
|
||||
<pre>
|
||||
Example:
|
||||
string quoted = RE::QuoteMeta(unquoted);
|
||||
</pre>
|
||||
Note that it's legal to escape a character even if it has no special meaning in
|
||||
a regular expression -- so this function does that. (This also makes it
|
||||
identical to the perl function of the same name; see "perldoc -f quotemeta".)
|
||||
For example, "1.5-2.0?" becomes "1\.5\-2\.0\?".
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">PARTIAL MATCHES</a><br>
|
||||
<P>
|
||||
You can use the "PartialMatch" operation when you want the pattern
|
||||
to match any substring of the text.
|
||||
@@ -125,7 +152,7 @@ to match any substring of the text.
|
||||
assert(number == 100);
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">UTF-8 AND THE MATCHING INTERFACE</a><br>
|
||||
<br><a name="SEC6" href="#TOC1">UTF-8 AND THE MATCHING INTERFACE</a><br>
|
||||
<P>
|
||||
By default, pattern and text are plain text, one byte per character. The UTF8
|
||||
flag, passed to the constructor, causes both pattern and string to be treated
|
||||
@@ -150,7 +177,7 @@ NOTE: The UTF8 flag is ignored if pcre was not configured with the
|
||||
--enable-utf8 flag.
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE</a><br>
|
||||
<br><a name="SEC7" href="#TOC1">PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE</a><br>
|
||||
<P>
|
||||
PCRE defines some modifiers to change the behavior of the regular expression
|
||||
engine. The C++ wrapper defines an auxiliary class, RE_Options, as a vehicle to
|
||||
@@ -244,7 +271,7 @@ PCRE_EXTENDED, and PCRE_MULTILINE to a RE with one statement, you may write:
|
||||
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">SCANNING TEXT INCREMENTALLY</a><br>
|
||||
<br><a name="SEC8" href="#TOC1">SCANNING TEXT INCREMENTALLY</a><br>
|
||||
<P>
|
||||
The "Consume" operation may be useful if you want to repeatedly
|
||||
match regular expressions at the front of a string and skip over
|
||||
@@ -277,7 +304,7 @@ could extract all words from a string by repeatedly calling
|
||||
pcrecpp::RE("(\\w+)").FindAndConsume(&input, &word)
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">PARSING HEX/OCTAL/C-RADIX NUMBERS</a><br>
|
||||
<br><a name="SEC9" href="#TOC1">PARSING HEX/OCTAL/C-RADIX NUMBERS</a><br>
|
||||
<P>
|
||||
By default, if you pass a pointer to a numeric value, the
|
||||
corresponding text is interpreted as a base-10 number. You can
|
||||
@@ -295,7 +322,7 @@ prefixes, but defaults to base-10.
|
||||
</pre>
|
||||
will leave 64 in a, b, c, and d.
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">REPLACING PARTS OF STRINGS</a><br>
|
||||
<br><a name="SEC10" href="#TOC1">REPLACING PARTS OF STRINGS</a><br>
|
||||
<P>
|
||||
You can replace the first match of "pattern" in "str" with "rewrite".
|
||||
Within "rewrite", backslash-escaped digits (\1 to \9) can be
|
||||
@@ -327,11 +354,17 @@ The non-matching portions of "text" are ignored. Returns true iff a match
|
||||
occurred and the extraction happened successfully; if no match occurs, the
|
||||
string is left unaffected.
|
||||
</P>
|
||||
<br><a name="SEC10" href="#TOC1">AUTHOR</a><br>
|
||||
<br><a name="SEC11" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
The C++ wrapper was contributed by Google Inc.
|
||||
<br>
|
||||
Copyright © 2005 Google Inc.
|
||||
Copyright © 2007 Google Inc.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC12" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 17 March 2009
|
||||
<br>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -15,14 +15,17 @@ man page, in case the conversion went wrong.
|
||||
<ul>
|
||||
<li><a name="TOC1" href="#SEC1">SYNOPSIS</a>
|
||||
<li><a name="TOC2" href="#SEC2">DESCRIPTION</a>
|
||||
<li><a name="TOC3" href="#SEC3">OPTIONS</a>
|
||||
<li><a name="TOC4" href="#SEC4">ENVIRONMENT VARIABLES</a>
|
||||
<li><a name="TOC5" href="#SEC5">NEWLINES</a>
|
||||
<li><a name="TOC6" href="#SEC6">OPTIONS COMPATIBILITY</a>
|
||||
<li><a name="TOC7" href="#SEC7">OPTIONS WITH DATA</a>
|
||||
<li><a name="TOC8" href="#SEC8">MATCHING ERRORS</a>
|
||||
<li><a name="TOC9" href="#SEC9">DIAGNOSTICS</a>
|
||||
<li><a name="TOC10" href="#SEC10">AUTHOR</a>
|
||||
<li><a name="TOC3" href="#SEC3">SUPPORT FOR COMPRESSED FILES</a>
|
||||
<li><a name="TOC4" href="#SEC4">OPTIONS</a>
|
||||
<li><a name="TOC5" href="#SEC5">ENVIRONMENT VARIABLES</a>
|
||||
<li><a name="TOC6" href="#SEC6">NEWLINES</a>
|
||||
<li><a name="TOC7" href="#SEC7">OPTIONS COMPATIBILITY</a>
|
||||
<li><a name="TOC8" href="#SEC8">OPTIONS WITH DATA</a>
|
||||
<li><a name="TOC9" href="#SEC9">MATCHING ERRORS</a>
|
||||
<li><a name="TOC10" href="#SEC10">DIAGNOSTICS</a>
|
||||
<li><a name="TOC11" href="#SEC11">SEE ALSO</a>
|
||||
<li><a name="TOC12" href="#SEC12">AUTHOR</a>
|
||||
<li><a name="TOC13" href="#SEC13">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SYNOPSIS</a><br>
|
||||
<P>
|
||||
@@ -33,9 +36,9 @@ man page, in case the conversion went wrong.
|
||||
<b>pcregrep</b> searches files for character patterns, in the same way as other
|
||||
grep commands do, but it uses the PCRE regular expression library to support
|
||||
patterns that are compatible with the regular expressions of Perl 5. See
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
for a full description of syntax and semantics of the regular expressions that
|
||||
PCRE supports.
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b>(3)</a>
|
||||
for a full description of syntax and semantics of the regular expressions
|
||||
that PCRE supports.
|
||||
</P>
|
||||
<P>
|
||||
Patterns, whether supplied on the command line or in a separate file, are given
|
||||
@@ -45,9 +48,9 @@ without delimiters. For example:
|
||||
</pre>
|
||||
If you attempt to use delimiters (for example, by surrounding a pattern with
|
||||
slashes, as is common in Perl scripts), they are interpreted as part of the
|
||||
pattern. Quotes can of course be used on the command line because they are
|
||||
interpreted by the shell, and indeed they are required if a pattern contains
|
||||
white space or shell metacharacters.
|
||||
pattern. Quotes can of course be used to delimit patterns on the command line
|
||||
because they are interpreted by the shell, and indeed they are required if a
|
||||
pattern contains white space or shell metacharacters.
|
||||
</P>
|
||||
<P>
|
||||
The first argument that follows any option settings is treated as the single
|
||||
@@ -63,23 +66,58 @@ For example:
|
||||
<pre>
|
||||
pcregrep some-pattern /file1 - /file3
|
||||
</pre>
|
||||
By default, each line that matches the pattern is copied to the standard
|
||||
By default, each line that matches a pattern is copied to the standard
|
||||
output, and if there is more than one file, the file name is output at the
|
||||
start of each line. However, there are options that can change how
|
||||
<b>pcregrep</b> behaves. In particular, the <b>-M</b> option makes it possible to
|
||||
search for patterns that span line boundaries. What defines a line boundary is
|
||||
controlled by the <b>-N</b> (<b>--newline</b>) option.
|
||||
start of each line, followed by a colon. However, there are options that can
|
||||
change how <b>pcregrep</b> behaves. In particular, the <b>-M</b> option makes it
|
||||
possible to search for patterns that span line boundaries. What defines a line
|
||||
boundary is controlled by the <b>-N</b> (<b>--newline</b>) option.
|
||||
</P>
|
||||
<P>
|
||||
Patterns are limited to 8K or BUFSIZ characters, whichever is the greater.
|
||||
BUFSIZ is defined in <b><stdio.h></b>.
|
||||
BUFSIZ is defined in <b><stdio.h></b>. When there is more than one pattern
|
||||
(specified by the use of <b>-e</b> and/or <b>-f</b>), each pattern is applied to
|
||||
each line in the order in which they are defined, except that all the <b>-e</b>
|
||||
patterns are tried before the <b>-f</b> patterns.
|
||||
</P>
|
||||
<P>
|
||||
By default, as soon as one pattern matches (or fails to match when <b>-v</b> is
|
||||
used), no further patterns are considered. However, if <b>--colour</b> (or
|
||||
<b>--color</b>) is used to colour the matching substrings, or if
|
||||
<b>--only-matching</b>, <b>--file-offsets</b>, or <b>--line-offsets</b> is used to
|
||||
output only the part of the line that matched (either shown literally, or as an
|
||||
offset), scanning resumes immediately following the match, so that further
|
||||
matches on the same line can be found. If there are multiple patterns, they are
|
||||
all tried on the remainder of the line, but patterns that follow the one that
|
||||
matched are not tried on the earlier part of the line.
|
||||
</P>
|
||||
<P>
|
||||
This is the same behaviour as GNU grep, but it does mean that the order in
|
||||
which multiple patterns are specified can affect the output when one of the
|
||||
above options is used.
|
||||
</P>
|
||||
<P>
|
||||
Patterns that can match an empty string are accepted, but empty string
|
||||
matches are not recognized. An example is the pattern "(super)?(man)?", in
|
||||
which all components are optional. This pattern finds all occurrences of both
|
||||
"super" and "man"; the output differs from matching with "super|man" when only
|
||||
the matching substrings are being shown.
|
||||
</P>
|
||||
<P>
|
||||
If the <b>LC_ALL</b> or <b>LC_CTYPE</b> environment variable is set,
|
||||
<b>pcregrep</b> uses the value to set a locale when calling the PCRE library.
|
||||
The <b>--locale</b> option can be used to override this.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">OPTIONS</a><br>
|
||||
<br><a name="SEC3" href="#TOC1">SUPPORT FOR COMPRESSED FILES</a><br>
|
||||
<P>
|
||||
It is possible to compile <b>pcregrep</b> so that it uses <b>libz</b> or
|
||||
<b>libbz2</b> to read files whose names end in <b>.gz</b> or <b>.bz2</b>,
|
||||
respectively. You can find out whether your binary has support for one or both
|
||||
of these file types by running it with the <b>--help</b> option. If the
|
||||
appropriate support is not present, files are treated as plain text. The
|
||||
standard input is always so treated.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">OPTIONS</a><br>
|
||||
<P>
|
||||
<b>--</b>
|
||||
This terminate the list of options. It is useful if the next item on the
|
||||
@@ -124,16 +162,21 @@ equals sign.
|
||||
</P>
|
||||
<P>
|
||||
<b>--colour=</b><i>value</i>, <b>--color=</b><i>value</i>
|
||||
This option specifies under what circumstances the part of a line that matched
|
||||
a pattern should be coloured in the output. The value may be "never" (the
|
||||
default), "always", or "auto". In the latter case, colouring happens only if
|
||||
the standard output is connected to a terminal. The colour can be specified by
|
||||
setting the environment variable PCREGREP_COLOUR or PCREGREP_COLOR. The value
|
||||
of this variable should be a string of two numbers, separated by a semicolon.
|
||||
They are copied directly into the control string for setting colour on a
|
||||
terminal, so it is your responsibility to ensure that they make sense. If
|
||||
neither of the environment variables is set, the default is "1;31", which gives
|
||||
red.
|
||||
This option specifies under what circumstances the parts of a line that matched
|
||||
a pattern should be coloured in the output. By default, the output is not
|
||||
coloured. The value (which is optional, see above) may be "never", "always", or
|
||||
"auto". In the latter case, colouring happens only if the standard output is
|
||||
connected to a terminal. More resources are used when colouring is enabled,
|
||||
because <b>pcregrep</b> has to search for all possible matches in a line, not
|
||||
just one, in order to colour them all.
|
||||
</P>
|
||||
<P>
|
||||
The colour that is used can be specified by setting the environment variable
|
||||
PCREGREP_COLOUR or PCREGREP_COLOR. The value of this variable should be a
|
||||
string of two numbers, separated by a semicolon. They are copied directly into
|
||||
the control string for setting colour on a terminal, so it is your
|
||||
responsibility to ensure that they make sense. If neither of the environment
|
||||
variables is set, the default is "1;31", which gives red.
|
||||
</P>
|
||||
<P>
|
||||
<b>-D</b> <i>action</i>, <b>--devices=</b><i>action</i>
|
||||
@@ -150,30 +193,43 @@ are read as if they were ordinary files. In some operating systems the effect
|
||||
of reading a directory like this is an immediate end-of-file.
|
||||
</P>
|
||||
<P>
|
||||
<b>-e</b> <i>pattern</i>, <b>--regex=</b><i>pattern</i>,
|
||||
<b>--regexp=</b><i>pattern</i> Specify a pattern to be matched. This option can
|
||||
be used multiple times in order to specify several patterns. It can also be
|
||||
used as a way of specifying a single pattern that starts with a hyphen. When
|
||||
<b>-e</b> is used, no argument pattern is taken from the command line; all
|
||||
arguments are treated as file names. There is an overall maximum of 100
|
||||
patterns. They are applied to each line in the order in which they are defined
|
||||
until one matches (or fails to match if <b>-v</b> is used). If <b>-f</b> is used
|
||||
with <b>-e</b>, the command line patterns are matched first, followed by the
|
||||
patterns from the file, independent of the order in which these options are
|
||||
specified. Note that multiple use of <b>-e</b> is not the same as a single
|
||||
pattern with alternatives. For example, X|Y finds the first character in a line
|
||||
that is X or Y, whereas if the two patterns are given separately,
|
||||
<b>pcregrep</b> finds X if it is present, even if it follows Y in the line. It
|
||||
finds Y only if there is no X in the line. This really matters only if you are
|
||||
using <b>-o</b> to show the portion of the line that matched.
|
||||
<b>-e</b> <i>pattern</i>, <b>--regex=</b><i>pattern</i>, <b>--regexp=</b><i>pattern</i>
|
||||
Specify a pattern to be matched. This option can be used multiple times in
|
||||
order to specify several patterns. It can also be used as a way of specifying a
|
||||
single pattern that starts with a hyphen. When <b>-e</b> is used, no argument
|
||||
pattern is taken from the command line; all arguments are treated as file
|
||||
names. There is an overall maximum of 100 patterns. They are applied to each
|
||||
line in the order in which they are defined until one matches (or fails to
|
||||
match if <b>-v</b> is used). If <b>-f</b> is used with <b>-e</b>, the command line
|
||||
patterns are matched first, followed by the patterns from the file, independent
|
||||
of the order in which these options are specified. Note that multiple use of
|
||||
<b>-e</b> is not the same as a single pattern with alternatives. For example,
|
||||
X|Y finds the first character in a line that is X or Y, whereas if the two
|
||||
patterns are given separately, <b>pcregrep</b> finds X if it is present, even if
|
||||
it follows Y in the line. It finds Y only if there is no X in the line. This
|
||||
really matters only if you are using <b>-o</b> to show the part(s) of the line
|
||||
that matched.
|
||||
</P>
|
||||
<P>
|
||||
<b>--exclude</b>=<i>pattern</i>
|
||||
When <b>pcregrep</b> is searching the files in a directory as a consequence of
|
||||
the <b>-r</b> (recursive search) option, any files whose names match the pattern
|
||||
are excluded. The pattern is a PCRE regular expression. If a file name matches
|
||||
both <b>--include</b> and <b>--exclude</b>, it is excluded. There is no short
|
||||
form for this option.
|
||||
the <b>-r</b> (recursive search) option, any regular files whose names match the
|
||||
pattern are excluded. Subdirectories are not excluded by this option; they are
|
||||
searched recursively, subject to the <b>--exclude_dir</b> and
|
||||
<b>--include_dir</b> options. The pattern is a PCRE regular expression, and is
|
||||
matched against the final component of the file name (not the entire path). If
|
||||
a file name matches both <b>--include</b> and <b>--exclude</b>, it is excluded.
|
||||
There is no short form for this option.
|
||||
</P>
|
||||
<P>
|
||||
<b>--exclude_dir</b>=<i>pattern</i>
|
||||
When <b>pcregrep</b> is searching the contents of a directory as a consequence
|
||||
of the <b>-r</b> (recursive search) option, any subdirectories whose names match
|
||||
the pattern are excluded. (Note that the \fP--exclude\fP option does not affect
|
||||
subdirectories.) The pattern is a PCRE regular expression, and is matched
|
||||
against the final component of the name (not the entire path). If a
|
||||
subdirectory name matches both <b>--include_dir</b> and <b>--exclude_dir</b>, it
|
||||
is excluded. There is no short form for this option.
|
||||
</P>
|
||||
<P>
|
||||
<b>-F</b>, <b>--fixed-strings</b>
|
||||
@@ -193,27 +249,37 @@ present; they are tested before the file's patterns. However, no other pattern
|
||||
is taken from the command line; all arguments are treated as file names. There
|
||||
is an overall maximum of 100 patterns. Trailing white space is removed from
|
||||
each line, and blank lines are ignored. An empty file contains no patterns and
|
||||
therefore matches nothing.
|
||||
therefore matches nothing. See also the comments about multiple patterns versus
|
||||
a single pattern with alternatives in the description of <b>-e</b> above.
|
||||
</P>
|
||||
<P>
|
||||
<b>--file-offsets</b>
|
||||
Instead of showing lines or parts of lines that match, show each match as an
|
||||
offset from the start of the file and a length, separated by a comma. In this
|
||||
mode, no context is shown. That is, the <b>-A</b>, <b>-B</b>, and <b>-C</b>
|
||||
options are ignored. If there is more than one match in a line, each of them is
|
||||
shown separately. This option is mutually exclusive with <b>--line-offsets</b>
|
||||
and <b>--only-matching</b>.
|
||||
</P>
|
||||
<P>
|
||||
<b>-H</b>, <b>--with-filename</b>
|
||||
Force the inclusion of the filename at the start of output lines when searching
|
||||
a single file. By default, the filename is not shown in this case. For matching
|
||||
lines, the filename is followed by a colon and a space; for context lines, a
|
||||
hyphen separator is used. If a line number is also being output, it follows the
|
||||
file name without a space.
|
||||
lines, the filename is followed by a colon; for context lines, a hyphen
|
||||
separator is used. If a line number is also being output, it follows the file
|
||||
name.
|
||||
</P>
|
||||
<P>
|
||||
<b>-h</b>, <b>--no-filename</b>
|
||||
Suppress the output filenames when searching multiple files. By default,
|
||||
filenames are shown when multiple files are searched. For matching lines, the
|
||||
filename is followed by a colon and a space; for context lines, a hyphen
|
||||
separator is used. If a line number is also being output, it follows the file
|
||||
name without a space.
|
||||
filename is followed by a colon; for context lines, a hyphen separator is used.
|
||||
If a line number is also being output, it follows the file name.
|
||||
</P>
|
||||
<P>
|
||||
<b>--help</b>
|
||||
Output a brief help message and exit.
|
||||
Output a help message, giving brief details of the command options and file
|
||||
type support, and then exit.
|
||||
</P>
|
||||
<P>
|
||||
<b>-i</b>, <b>--ignore-case</b>
|
||||
@@ -222,10 +288,23 @@ Ignore upper/lower case distinctions during comparisons.
|
||||
<P>
|
||||
<b>--include</b>=<i>pattern</i>
|
||||
When <b>pcregrep</b> is searching the files in a directory as a consequence of
|
||||
the <b>-r</b> (recursive search) option, only those files whose names match the
|
||||
pattern are included. The pattern is a PCRE regular expression. If a file name
|
||||
matches both <b>--include</b> and <b>--exclude</b>, it is excluded. There is no
|
||||
short form for this option.
|
||||
the <b>-r</b> (recursive search) option, only those regular files whose names
|
||||
match the pattern are included. Subdirectories are always included and searched
|
||||
recursively, subject to the \fP--include_dir\fP and <b>--exclude_dir</b>
|
||||
options. The pattern is a PCRE regular expression, and is matched against the
|
||||
final component of the file name (not the entire path). If a file name matches
|
||||
both <b>--include</b> and <b>--exclude</b>, it is excluded. There is no short
|
||||
form for this option.
|
||||
</P>
|
||||
<P>
|
||||
<b>--include_dir</b>=<i>pattern</i>
|
||||
When <b>pcregrep</b> is searching the contents of a directory as a consequence
|
||||
of the <b>-r</b> (recursive search) option, only those subdirectories whose
|
||||
names match the pattern are included. (Note that the <b>--include</b> option
|
||||
does not affect subdirectories.) The pattern is a PCRE regular expression, and
|
||||
is matched against the final component of the name (not the entire path). If a
|
||||
subdirectory name matches both <b>--include_dir</b> and <b>--exclude_dir</b>, it
|
||||
is excluded. There is no short form for this option.
|
||||
</P>
|
||||
<P>
|
||||
<b>-L</b>, <b>--files-without-match</b>
|
||||
@@ -247,6 +326,16 @@ are being output. If not supplied, "(standard input)" is used. There is no
|
||||
short form for this option.
|
||||
</P>
|
||||
<P>
|
||||
<b>--line-offsets</b>
|
||||
Instead of showing lines or parts of lines that match, show each match as a
|
||||
line number, the offset from the start of the line, and a length. The line
|
||||
number is terminated by a colon (as usual; see the <b>-n</b> option), and the
|
||||
offset and length are separated by a comma. In this mode, no context is shown.
|
||||
That is, the <b>-A</b>, <b>-B</b>, and <b>-C</b> options are ignored. If there is
|
||||
more than one match in a line, each of them is shown separately. This option is
|
||||
mutually exclusive with <b>--file-offsets</b> and <b>--only-matching</b>.
|
||||
</P>
|
||||
<P>
|
||||
<b>--locale</b>=<i>locale-name</i>
|
||||
This option specifies a locale to be used for pattern matching. It overrides
|
||||
the value in the <b>LC_ALL</b> or <b>LC_CTYPE</b> environment variables. If no
|
||||
@@ -268,28 +357,41 @@ are guaranteed to be available for lookbehind assertions.
|
||||
</P>
|
||||
<P>
|
||||
<b>-N</b> <i>newline-type</i>, <b>--newline=</b><i>newline-type</i>
|
||||
The PCRE library supports three different character sequences for indicating
|
||||
The PCRE library supports five different conventions for indicating
|
||||
the ends of lines. They are the single-character sequences CR (carriage return)
|
||||
and LF (linefeed), and the two-character sequence CR, LF. When the library is
|
||||
built, a default line-ending sequence is specified. This is normally the
|
||||
standard sequence for the operating system. Unless otherwise specified by this
|
||||
option, <b>pcregrep</b> uses the default. The possible values for this option
|
||||
are CR, LF, or CRLF. This makes it possible to use <b>pcregrep</b> on files that
|
||||
have come from other environments without having to modify their line endings.
|
||||
If the data that is being scanned does not agree with the convention set by
|
||||
this option, <b>pcregrep</b> may behave in strange ways.
|
||||
and LF (linefeed), the two-character sequence CRLF, an "anycrlf" convention,
|
||||
which recognizes any of the preceding three types, and an "any" convention, in
|
||||
which any Unicode line ending sequence is assumed to end a line. The Unicode
|
||||
sequences are the three just mentioned, plus VT (vertical tab, U+000B), FF
|
||||
(formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and
|
||||
PS (paragraph separator, U+2029).
|
||||
<br>
|
||||
<br>
|
||||
When the PCRE library is built, a default line-ending sequence is specified.
|
||||
This is normally the standard sequence for the operating system. Unless
|
||||
otherwise specified by this option, <b>pcregrep</b> uses the library's default.
|
||||
The possible values for this option are CR, LF, CRLF, ANYCRLF, or ANY. This
|
||||
makes it possible to use <b>pcregrep</b> on files that have come from other
|
||||
environments without having to modify their line endings. If the data that is
|
||||
being scanned does not agree with the convention set by this option,
|
||||
<b>pcregrep</b> may behave in strange ways.
|
||||
</P>
|
||||
<P>
|
||||
<b>-n</b>, <b>--line-number</b>
|
||||
Precede each output line by its line number in the file, followed by a colon
|
||||
and a space for matching lines or a hyphen and a space for context lines. If
|
||||
the filename is also being output, it precedes the line number.
|
||||
for matching lines or a hyphen for context lines. If the filename is also being
|
||||
output, it precedes the line number. This option is forced if
|
||||
<b>--line-offsets</b> is used.
|
||||
</P>
|
||||
<P>
|
||||
<b>-o</b>, <b>--only-matching</b>
|
||||
Show only the part of the line that matched a pattern. In this mode, no
|
||||
context is shown. That is, the <b>-A</b>, <b>-B</b>, and <b>-C</b> options are
|
||||
ignored.
|
||||
ignored. If there is more than one match in a line, each of them is shown
|
||||
separately. If <b>-o</b> is combined with <b>-v</b> (invert the sense of the
|
||||
match to find non-matching lines), no output is generated, but the return code
|
||||
is set appropriately. This option is mutually exclusive with
|
||||
<b>--file-offsets</b> and <b>--line-offsets</b>.
|
||||
</P>
|
||||
<P>
|
||||
<b>-q</b>, <b>--quiet</b>
|
||||
@@ -332,20 +434,20 @@ Force the patterns to match only whole words. This is equivalent to having \b
|
||||
at the start and end of the pattern.
|
||||
</P>
|
||||
<P>
|
||||
<b>-x</b>, <b>--line-regex</b>, \fP--line-regexp\fP
|
||||
<b>-x</b>, <b>--line-regex</b>, <b>--line-regexp</b>
|
||||
Force the patterns to be anchored (each must start matching at the beginning of
|
||||
a line) and in addition, require them to match entire lines. This is
|
||||
equivalent to having ^ and $ characters at the start and end of each
|
||||
alternative branch in every pattern.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">ENVIRONMENT VARIABLES</a><br>
|
||||
<br><a name="SEC5" href="#TOC1">ENVIRONMENT VARIABLES</a><br>
|
||||
<P>
|
||||
The environment variables <b>LC_ALL</b> and <b>LC_CTYPE</b> are examined, in that
|
||||
order, for a locale. The first one that is set is used. This can be overridden
|
||||
by the <b>--locale</b> option. If no locale is set, the PCRE library's default
|
||||
(usually the "C" locale) is used.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">NEWLINES</a><br>
|
||||
<br><a name="SEC6" href="#TOC1">NEWLINES</a><br>
|
||||
<P>
|
||||
The <b>-N</b> (<b>--newline</b>) option allows <b>pcregrep</b> to scan files with
|
||||
different newline conventions from the default. However, the setting of this
|
||||
@@ -354,7 +456,7 @@ the standard error and output streams. It uses the string "\n" in C
|
||||
<b>printf()</b> calls to indicate newlines, relying on the C I/O library to
|
||||
convert this to an appropriate sequence if the output is sent to a file.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">OPTIONS COMPATIBILITY</a><br>
|
||||
<br><a name="SEC7" href="#TOC1">OPTIONS COMPATIBILITY</a><br>
|
||||
<P>
|
||||
The majority of short and long forms of <b>pcregrep</b>'s options are the same
|
||||
as in the GNU <b>grep</b> program. Any long option of the form
|
||||
@@ -362,7 +464,7 @@ as in the GNU <b>grep</b> program. Any long option of the form
|
||||
(PCRE terminology). However, the <b>--locale</b>, <b>-M</b>, <b>--multiline</b>,
|
||||
<b>-u</b>, and <b>--utf-8</b> options are specific to <b>pcregrep</b>.
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">OPTIONS WITH DATA</a><br>
|
||||
<br><a name="SEC8" href="#TOC1">OPTIONS WITH DATA</a><br>
|
||||
<P>
|
||||
There are four different ways in which an option with data can be specified.
|
||||
If a short form option is used, the data may follow immediately, or in the next
|
||||
@@ -389,7 +491,7 @@ for which the data is optional. If this option does have data, it must be given
|
||||
in the first form, using an equals character. Otherwise it will be assumed that
|
||||
it has no data.
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">MATCHING ERRORS</a><br>
|
||||
<br><a name="SEC9" href="#TOC1">MATCHING ERRORS</a><br>
|
||||
<P>
|
||||
It is possible to supply a regular expression that takes a very long time to
|
||||
fail to match certain lines. Such patterns normally involve nested indefinite
|
||||
@@ -399,7 +501,7 @@ in these circumstances. If this happens, <b>pcregrep</b> outputs an error
|
||||
message and the line that caused the problem to the standard error stream. If
|
||||
there are more than 20 such errors, <b>pcregrep</b> gives up.
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">DIAGNOSTICS</a><br>
|
||||
<br><a name="SEC10" href="#TOC1">DIAGNOSTICS</a><br>
|
||||
<P>
|
||||
Exit status is 0 if any matches were found, 1 if no matches were found, and 2
|
||||
for syntax errors and non-existent or inacessible files (even if matches were
|
||||
@@ -407,18 +509,25 @@ found in other files) or too many matching errors. Using the <b>-s</b> option to
|
||||
suppress error messages about inaccessble files does not affect the return
|
||||
code.
|
||||
</P>
|
||||
<br><a name="SEC10" href="#TOC1">AUTHOR</a><br>
|
||||
<br><a name="SEC11" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
<b>pcrepattern</b>(3), <b>pcretest</b>(1).
|
||||
</P>
|
||||
<br><a name="SEC12" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QG, England.
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC13" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 06 June 2006
|
||||
Last updated: 01 March 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -16,9 +16,11 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC1" href="#SEC1">PCRE MATCHING ALGORITHMS</a>
|
||||
<li><a name="TOC2" href="#SEC2">REGULAR EXPRESSIONS AS TREES</a>
|
||||
<li><a name="TOC3" href="#SEC3">THE STANDARD MATCHING ALGORITHM</a>
|
||||
<li><a name="TOC4" href="#SEC4">THE DFA MATCHING ALGORITHM</a>
|
||||
<li><a name="TOC5" href="#SEC5">ADVANTAGES OF THE DFA ALGORITHM</a>
|
||||
<li><a name="TOC6" href="#SEC6">DISADVANTAGES OF THE DFA ALGORITHM</a>
|
||||
<li><a name="TOC4" href="#SEC4">THE ALTERNATIVE MATCHING ALGORITHM</a>
|
||||
<li><a name="TOC5" href="#SEC5">ADVANTAGES OF THE ALTERNATIVE ALGORITHM</a>
|
||||
<li><a name="TOC6" href="#SEC6">DISADVANTAGES OF THE ALTERNATIVE ALGORITHM</a>
|
||||
<li><a name="TOC7" href="#SEC7">AUTHOR</a>
|
||||
<li><a name="TOC8" href="#SEC8">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PCRE MATCHING ALGORITHMS</a><br>
|
||||
<P>
|
||||
@@ -46,7 +48,7 @@ is matched against the string
|
||||
<something> <something else> <something further>
|
||||
</pre>
|
||||
there are three possible answers. The standard algorithm finds only one of
|
||||
them, whereas the DFA algorithm finds all three.
|
||||
them, whereas the alternative algorithm finds all three.
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">REGULAR EXPRESSIONS AS TREES</a><br>
|
||||
<P>
|
||||
@@ -59,8 +61,8 @@ correspond to the two matching algorithms provided by PCRE.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">THE STANDARD MATCHING ALGORITHM</a><br>
|
||||
<P>
|
||||
In the terminology of Jeffrey Friedl's book \fIMastering Regular
|
||||
Expressions\fP, the standard algorithm is an "NFA algorithm". It conducts a
|
||||
In the terminology of Jeffrey Friedl's book "Mastering Regular
|
||||
Expressions", the standard algorithm is an "NFA algorithm". It conducts a
|
||||
depth-first search of the pattern tree. That is, it proceeds along a single
|
||||
path through the tree, checking that the subject matches what is required. When
|
||||
there is a mismatch, the algorithm tries any alternatives at the current point,
|
||||
@@ -83,14 +85,15 @@ straightforward for this algorithm to keep track of the substrings that are
|
||||
matched by portions of the pattern in parentheses. This provides support for
|
||||
capturing parentheses and back references.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">THE DFA MATCHING ALGORITHM</a><br>
|
||||
<br><a name="SEC4" href="#TOC1">THE ALTERNATIVE MATCHING ALGORITHM</a><br>
|
||||
<P>
|
||||
DFA stands for "deterministic finite automaton", but you do not need to
|
||||
understand the origins of that name. This algorithm conducts a breadth-first
|
||||
search of the tree. Starting from the first matching point in the subject, it
|
||||
scans the subject string from left to right, once, character by character, and
|
||||
as it does this, it remembers all the paths through the tree that represent
|
||||
valid matches.
|
||||
This algorithm conducts a breadth-first search of the tree. Starting from the
|
||||
first matching point in the subject, it scans the subject string from left to
|
||||
right, once, character by character, and as it does this, it remembers all the
|
||||
paths through the tree that represent valid matches. In Friedl's terminology,
|
||||
this is a kind of "DFA algorithm", though it is not implemented as a
|
||||
traditional finite state machine (it keeps multiple states active
|
||||
simultaneously).
|
||||
</P>
|
||||
<P>
|
||||
The scan continues until either the end of the subject is reached, or there are
|
||||
@@ -114,12 +117,21 @@ matches that start at later positions.
|
||||
</P>
|
||||
<P>
|
||||
There are a number of features of PCRE regular expressions that are not
|
||||
supported by the DFA matching algorithm. They are as follows:
|
||||
supported by the alternative matching algorithm. They are as follows:
|
||||
</P>
|
||||
<P>
|
||||
1. Because the algorithm finds all possible matches, the greedy or ungreedy
|
||||
nature of repetition quantifiers is not relevant. Greedy and ungreedy
|
||||
quantifiers are treated in exactly the same way.
|
||||
quantifiers are treated in exactly the same way. However, possessive
|
||||
quantifiers can make a difference when what follows could also match what is
|
||||
quantified, for example in a pattern like this:
|
||||
<pre>
|
||||
^a++\w!
|
||||
</pre>
|
||||
This pattern matches "aaab!" but not "aaa!", which would be matched by a
|
||||
non-possessive quantifier. Similarly, if an atomic group is present, it is
|
||||
matched as if it were a standalone pattern at the current point, and the
|
||||
longest match is then "locked in" for the rest of the overall pattern.
|
||||
</P>
|
||||
<P>
|
||||
2. When dealing with multiple paths through the tree simultaneously, it is not
|
||||
@@ -133,22 +145,30 @@ not supported, and cause errors if encountered.
|
||||
</P>
|
||||
<P>
|
||||
4. For the same reason, conditional expressions that use a backreference as the
|
||||
condition are not supported.
|
||||
condition or test for a specific group recursion are not supported.
|
||||
</P>
|
||||
<P>
|
||||
5. Callouts are supported, but the value of the <i>capture_top</i> field is
|
||||
5. Because many paths through the tree may be active, the \K escape sequence,
|
||||
which resets the start of the match when encountered (but may be on some paths
|
||||
and not on others), is not supported. It causes an error if encountered.
|
||||
</P>
|
||||
<P>
|
||||
6. Callouts are supported, but the value of the <i>capture_top</i> field is
|
||||
always 1, and the value of the <i>capture_last</i> field is always -1.
|
||||
</P>
|
||||
<P>
|
||||
6.
|
||||
The \C escape sequence, which (in the standard algorithm) matches a single
|
||||
byte, even in UTF-8 mode, is not supported because the DFA algorithm moves
|
||||
through the subject string one character at a time, for all active paths
|
||||
7. The \C escape sequence, which (in the standard algorithm) matches a single
|
||||
byte, even in UTF-8 mode, is not supported because the alternative algorithm
|
||||
moves through the subject string one character at a time, for all active paths
|
||||
through the tree.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">ADVANTAGES OF THE DFA ALGORITHM</a><br>
|
||||
<P>
|
||||
Using the DFA matching algorithm provides the following advantages:
|
||||
8. Except for (*FAIL), the backtracking control verbs such as (*PRUNE) are not
|
||||
supported. (*FAIL) is supported, and behaves like a failing negative assertion.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">ADVANTAGES OF THE ALTERNATIVE ALGORITHM</a><br>
|
||||
<P>
|
||||
Using the alternative matching algorithm provides the following advantages:
|
||||
</P>
|
||||
<P>
|
||||
1. All possible matches (at a single point in the subject) are automatically
|
||||
@@ -159,17 +179,18 @@ callouts.
|
||||
<P>
|
||||
2. There is much better support for partial matching. The restrictions on the
|
||||
content of the pattern that apply when using the standard algorithm for partial
|
||||
matching do not apply to the DFA algorithm. For non-anchored patterns, the
|
||||
starting position of a partial match is available.
|
||||
matching do not apply to the alternative algorithm. For non-anchored patterns,
|
||||
the starting position of a partial match is available.
|
||||
</P>
|
||||
<P>
|
||||
3. Because the DFA algorithm scans the subject string just once, and never
|
||||
needs to backtrack, it is possible to pass very long subject strings to the
|
||||
matching function in several pieces, checking for partial matching each time.
|
||||
3. Because the alternative algorithm scans the subject string just once, and
|
||||
never needs to backtrack, it is possible to pass very long subject strings to
|
||||
the matching function in several pieces, checking for partial matching each
|
||||
time.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">DISADVANTAGES OF THE DFA ALGORITHM</a><br>
|
||||
<br><a name="SEC6" href="#TOC1">DISADVANTAGES OF THE ALTERNATIVE ALGORITHM</a><br>
|
||||
<P>
|
||||
The DFA algorithm suffers from a number of disadvantages:
|
||||
The alternative algorithm suffers from a number of disadvantages:
|
||||
</P>
|
||||
<P>
|
||||
1. It is substantially slower than the standard algorithm. This is partly
|
||||
@@ -180,13 +201,24 @@ less susceptible to optimization.
|
||||
2. Capturing parentheses and back references are not supported.
|
||||
</P>
|
||||
<P>
|
||||
3. The "atomic group" feature of PCRE regular expressions is supported, but
|
||||
does not provide the advantage that it does for the standard algorithm.
|
||||
3. Although atomic groups are supported, their use does not provide the
|
||||
performance advantage that it does for the standard algorithm.
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Last updated: 06 June 2006
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 19 April 2008
|
||||
<br>
|
||||
Copyright © 1997-2008 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -17,6 +17,8 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC2" href="#SEC2">RESTRICTED PATTERNS FOR PCRE_PARTIAL</a>
|
||||
<li><a name="TOC3" href="#SEC3">EXAMPLE OF PARTIAL MATCHING USING PCRETEST</a>
|
||||
<li><a name="TOC4" href="#SEC4">MULTI-SEGMENT MATCHING WITH pcre_dfa_exec()</a>
|
||||
<li><a name="TOC5" href="#SEC5">AUTHOR</a>
|
||||
<li><a name="TOC6" href="#SEC6">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PARTIAL MATCHING IN PCRE</a><br>
|
||||
<P>
|
||||
@@ -90,6 +92,8 @@ envisaged for this facility, this is not felt to be a major restriction.
|
||||
<P>
|
||||
If PCRE_PARTIAL is set for a pattern that does not conform to the restrictions,
|
||||
<b>pcre_exec()</b> returns the error code PCRE_ERROR_BADPARTIAL (-13).
|
||||
You can use the PCRE_INFO_OKPARTIAL call to <b>pcre_fullinfo()</b> to find out
|
||||
if a compiled pattern can be used for partial matching.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">EXAMPLE OF PARTIAL MATCHING USING PCRETEST</a><br>
|
||||
<P>
|
||||
@@ -112,8 +116,9 @@ uses the date example quoted above:
|
||||
</pre>
|
||||
The first data string is matched completely, so <b>pcretest</b> shows the
|
||||
matched substrings. The remaining four strings do not match the complete
|
||||
pattern, but the first two are partial matches. The same test, using DFA
|
||||
matching (by means of the \D escape sequence), produces the following output:
|
||||
pattern, but the first two are partial matches. The same test, using
|
||||
<b>pcre_dfa_exec()</b> matching (by means of the \D escape sequence), produces
|
||||
the following output:
|
||||
<pre>
|
||||
re> /^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$/
|
||||
data> 25jun04\P\D
|
||||
@@ -134,11 +139,11 @@ available.
|
||||
<P>
|
||||
When a partial match has been found using <b>pcre_dfa_exec()</b>, it is possible
|
||||
to continue the match by providing additional subject data and calling
|
||||
<b>pcre_dfa_exec()</b> again with the PCRE_DFA_RESTART option and the same
|
||||
working space (where details of the previous partial match are stored). Here is
|
||||
an example using <b>pcretest</b>, where the \R escape sequence sets the
|
||||
PCRE_DFA_RESTART option and the \D escape sequence requests the use of
|
||||
<b>pcre_dfa_exec()</b>:
|
||||
<b>pcre_dfa_exec()</b> again with the same compiled regular expression, this
|
||||
time setting the PCRE_DFA_RESTART option. You must also pass the same working
|
||||
space as before, because this is where details of the previous partial match
|
||||
are stored. Here is an example using <b>pcretest</b>, using the \R escape
|
||||
sequence to set the PCRE_DFA_RESTART option (\P and \D are as above):
|
||||
<pre>
|
||||
re> /^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$/
|
||||
data> 23ja\P\D
|
||||
@@ -153,9 +158,10 @@ not retain the previously partially-matched string. It is up to the calling
|
||||
program to do that if it needs to.
|
||||
</P>
|
||||
<P>
|
||||
This facility can be used to pass very long subject strings to
|
||||
<b>pcre_dfa_exec()</b>. However, some care is needed for certain types of
|
||||
pattern.
|
||||
You can set PCRE_PARTIAL with PCRE_DFA_RESTART to continue partial matching
|
||||
over multiple segments. This facility can be used to pass very long subject
|
||||
strings to <b>pcre_dfa_exec()</b>. However, some care is needed for certain
|
||||
types of pattern.
|
||||
</P>
|
||||
<P>
|
||||
1. If the pattern contains tests for the beginning or end of a line, you need
|
||||
@@ -165,7 +171,7 @@ subject string for any call does not contain the beginning or end of a line.
|
||||
<P>
|
||||
2. If the pattern contains backward assertions (including \b or \B), you need
|
||||
to arrange for some overlap in the subject strings to allow for this. For
|
||||
example, you could pass the subject in chunks that were 500 bytes long, but in
|
||||
example, you could pass the subject in chunks that are 500 bytes long, but in
|
||||
a buffer of 700 bytes, with the starting offset set to 200 and the previous 200
|
||||
bytes at the start of the buffer.
|
||||
</P>
|
||||
@@ -174,7 +180,7 @@ bytes at the start of the buffer.
|
||||
always produce exactly the same result as matching over one single long string.
|
||||
The difference arises when there are multiple matching possibilities, because a
|
||||
partial match result is given only when there are no completed matches in a
|
||||
call to fBpcre_dfa_exec()\fP. This means that as soon as the shortest match has
|
||||
call to <b>pcre_dfa_exec()</b>. This means that as soon as the shortest match has
|
||||
been found, continuation to a new subject segment is no longer possible.
|
||||
Consider this <b>pcretest</b> example:
|
||||
<pre>
|
||||
@@ -216,10 +222,21 @@ patterns or patterns such as:
|
||||
</pre>
|
||||
where no string can be a partial match for both alternatives.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Last updated: 16 January 2006
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 04 June 2007
|
||||
<br>
|
||||
Copyright © 1997-2007 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
+813
-212
File diff suppressed because it is too large
Load Diff
@@ -16,13 +16,73 @@ man page, in case the conversion went wrong.
|
||||
PCRE PERFORMANCE
|
||||
</b><br>
|
||||
<P>
|
||||
Certain items that may appear in regular expression patterns are more efficient
|
||||
Two aspects of performance are discussed below: memory usage and processing
|
||||
time. The way you express your pattern as a regular expression can affect both
|
||||
of them.
|
||||
</P>
|
||||
<br><b>
|
||||
MEMORY USAGE
|
||||
</b><br>
|
||||
<P>
|
||||
Patterns are compiled by PCRE into a reasonably efficient byte code, so that
|
||||
most simple patterns do not use much memory. However, there is one case where
|
||||
memory usage can be unexpectedly large. When a parenthesized subpattern has a
|
||||
quantifier with a minimum greater than 1 and/or a limited maximum, the whole
|
||||
subpattern is repeated in the compiled code. For example, the pattern
|
||||
<pre>
|
||||
(abc|def){2,4}
|
||||
</pre>
|
||||
is compiled as if it were
|
||||
<pre>
|
||||
(abc|def)(abc|def)((abc|def)(abc|def)?)?
|
||||
</pre>
|
||||
(Technical aside: It is done this way so that backtrack points within each of
|
||||
the repetitions can be independently maintained.)
|
||||
</P>
|
||||
<P>
|
||||
For regular expressions whose quantifiers use only small numbers, this is not
|
||||
usually a problem. However, if the numbers are large, and particularly if such
|
||||
repetitions are nested, the memory usage can become an embarrassment. For
|
||||
example, the very simple pattern
|
||||
<pre>
|
||||
((ab){1,1000}c){1,3}
|
||||
</pre>
|
||||
uses 51K bytes when compiled. When PCRE is compiled with its default internal
|
||||
pointer size of two bytes, the size limit on a compiled pattern is 64K, and
|
||||
this is reached with the above pattern if the outer repetition is increased
|
||||
from 3 to 4. PCRE can be compiled to use larger internal pointers and thus
|
||||
handle larger compiled patterns, but it is better to try to rewrite your
|
||||
pattern to use less memory if you can.
|
||||
</P>
|
||||
<P>
|
||||
One way of reducing the memory usage for such patterns is to make use of PCRE's
|
||||
<a href="pcrepattern.html#subpatternsassubroutines">"subroutine"</a>
|
||||
facility. Re-writing the above pattern as
|
||||
<pre>
|
||||
((ab)(?2){0,999}c)(?1){0,2}
|
||||
</pre>
|
||||
reduces the memory requirements to 18K, and indeed it remains under 20K even
|
||||
with the outer repetition increased to 100. However, this pattern is not
|
||||
exactly equivalent, because the "subroutine" calls are treated as
|
||||
<a href="pcrepattern.html#atomicgroup">atomic groups</a>
|
||||
into which there can be no backtracking if there is a subsequent matching
|
||||
failure. Therefore, PCRE cannot do this kind of rewriting automatically.
|
||||
Furthermore, there is a noticeable loss of speed when executing the modified
|
||||
pattern. Nevertheless, if the atomic grouping is not a problem and the loss of
|
||||
speed is acceptable, this kind of rewriting will allow you to process patterns
|
||||
that PCRE cannot otherwise handle.
|
||||
</P>
|
||||
<br><b>
|
||||
PROCESSING TIME
|
||||
</b><br>
|
||||
<P>
|
||||
Certain items in regular expression patterns are processed more efficiently
|
||||
than others. It is more efficient to use a character class like [aeiou] than a
|
||||
set of alternatives such as (a|e|i|o|u). In general, the simplest construction
|
||||
that provides the required behaviour is usually the most efficient. Jeffrey
|
||||
Friedl's book contains a lot of useful general discussion about optimizing
|
||||
regular expressions for efficient performance. This document contains a few
|
||||
observations about PCRE.
|
||||
set of single-character alternatives such as (a|e|i|o|u). In general, the
|
||||
simplest construction that provides the required behaviour is usually the most
|
||||
efficient. Jeffrey Friedl's book contains a lot of useful general discussion
|
||||
about optimizing regular expressions for efficient performance. This document
|
||||
contains a few observations about PCRE.
|
||||
</P>
|
||||
<P>
|
||||
Using Unicode character properties (the \p, \P, and \X escapes) is slow,
|
||||
@@ -58,14 +118,15 @@ Beware of patterns that contain nested indefinite repeats. These can take a
|
||||
long time to run when applied to a string that does not match. Consider the
|
||||
pattern fragment
|
||||
<pre>
|
||||
(a+)*
|
||||
^(a+)*
|
||||
</pre>
|
||||
This can match "aaaa" in 33 different ways, and this number increases very
|
||||
This can match "aaaa" in 16 different ways, and this number increases very
|
||||
rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
|
||||
times, and for each of those cases other than 0, the + repeats can match
|
||||
times, and for each of those cases other than 0 or 4, the + repeats can match
|
||||
different numbers of times.) When the remainder of the pattern is such that the
|
||||
entire match is going to fail, PCRE has in principle to try every possible
|
||||
variation, and this can take an extremely long time.
|
||||
variation, and this can take an extremely long time, even for relatively short
|
||||
strings.
|
||||
</P>
|
||||
<P>
|
||||
An optimization catches some of the more simple cases such as
|
||||
@@ -88,10 +149,25 @@ appreciable time with strings longer than about 20 characters.
|
||||
In many cases, the solution to this kind of performance issue is to use an
|
||||
atomic group or a possessive quantifier.
|
||||
</P>
|
||||
<br><b>
|
||||
AUTHOR
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 28 February 2005
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><b>
|
||||
REVISION
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 06 March 2007
|
||||
<br>
|
||||
Copyright © 1997-2007 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2005 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -21,6 +21,7 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC6" href="#SEC6">ERROR MESSAGES</a>
|
||||
<li><a name="TOC7" href="#SEC7">MEMORY USAGE</a>
|
||||
<li><a name="TOC8" href="#SEC8">AUTHOR</a>
|
||||
<li><a name="TOC9" href="#SEC9">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SYNOPSIS OF POSIX API</a><br>
|
||||
<P>
|
||||
@@ -58,11 +59,11 @@ command for linking an application that uses them. Because the POSIX functions
|
||||
call the native ones, it is also necessary to add <b>-lpcre</b>.
|
||||
</P>
|
||||
<P>
|
||||
I have implemented only those option bits that can be reasonably mapped to PCRE
|
||||
native options. In addition, the option REG_EXTENDED is defined with the value
|
||||
zero. This has no effect, but since programs that are written to the POSIX
|
||||
interface often use it, this makes it easier to slot in PCRE as a replacement
|
||||
library. Other POSIX options are not even defined.
|
||||
I have implemented only those POSIX option bits that can be reasonably mapped
|
||||
to PCRE native options. In addition, the option REG_EXTENDED is defined with
|
||||
the value zero. This has no effect, but since programs that are written to the
|
||||
POSIX interface often use it, this makes it easier to slot in PCRE as a
|
||||
replacement library. Other POSIX options are not even defined.
|
||||
</P>
|
||||
<P>
|
||||
When PCRE is called via these functions, it is only the API that is POSIX-like
|
||||
@@ -179,18 +180,36 @@ REG_NEWLINE action.
|
||||
<br><a name="SEC5" href="#TOC1">MATCHING A PATTERN</a><br>
|
||||
<P>
|
||||
The function <b>regexec()</b> is called to match a compiled pattern <i>preg</i>
|
||||
against a given <i>string</i>, which is terminated by a zero byte, subject to
|
||||
the options in <i>eflags</i>. These can be:
|
||||
against a given <i>string</i>, which is by default terminated by a zero byte
|
||||
(but see REG_STARTEND below), subject to the options in <i>eflags</i>. These can
|
||||
be:
|
||||
<pre>
|
||||
REG_NOTBOL
|
||||
</pre>
|
||||
The PCRE_NOTBOL option is set when calling the underlying PCRE matching
|
||||
function.
|
||||
<pre>
|
||||
REG_NOTEMPTY
|
||||
</pre>
|
||||
The PCRE_NOTEMPTY option is set when calling the underlying PCRE matching
|
||||
function. Note that REG_NOTEMPTY is not part of the POSIX standard. However,
|
||||
setting this option can give more POSIX-like behaviour in some situations.
|
||||
<pre>
|
||||
REG_NOTEOL
|
||||
</pre>
|
||||
The PCRE_NOTEOL option is set when calling the underlying PCRE matching
|
||||
function.
|
||||
<pre>
|
||||
REG_STARTEND
|
||||
</pre>
|
||||
The string is considered to start at <i>string</i> + <i>pmatch[0].rm_so</i> and
|
||||
to have a terminating NUL located at <i>string</i> + <i>pmatch[0].rm_eo</i>
|
||||
(there need not actually be a NUL at that location), regardless of the value of
|
||||
<i>nmatch</i>. This is a BSD extension, compatible with but not specified by
|
||||
IEEE Standard 1003.2 (POSIX.2), and should be used with caution in software
|
||||
intended to be portable to other systems. Note that a non-zero <i>rm_so</i> does
|
||||
not imply REG_NOTBOL; REG_STARTEND affects only the location of the string, not
|
||||
how it is matched.
|
||||
</P>
|
||||
<P>
|
||||
If the pattern was compiled with the REG_NOSUB flag, no data about any matched
|
||||
@@ -231,14 +250,17 @@ memory, after which <i>preg</i> may no longer be used as a compiled expression.
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service,
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
Cambridge CB2 3QG, England.
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 16 January 2006
|
||||
Last updated: 11 March 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -17,6 +17,8 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC2" href="#SEC2">SAVING A COMPILED PATTERN</a>
|
||||
<li><a name="TOC3" href="#SEC3">RE-USING A PRECOMPILED PATTERN</a>
|
||||
<li><a name="TOC4" href="#SEC4">COMPATIBILITY WITH DIFFERENT PCRE RELEASES</a>
|
||||
<li><a name="TOC5" href="#SEC5">AUTHOR</a>
|
||||
<li><a name="TOC6" href="#SEC6">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SAVING AND RE-USING PRECOMPILED PCRE PATTERNS</a><br>
|
||||
<P>
|
||||
@@ -32,7 +34,9 @@ tables, it is a little bit more complicated.
|
||||
If you save compiled patterns to a file, you can copy them to a different host
|
||||
and run them there. This works even if the new host has the opposite endianness
|
||||
to the one on which the patterns were compiled. There may be a small
|
||||
performance penalty, but it should be insignificant.
|
||||
performance penalty, but it should be insignificant. However, compiling regular
|
||||
expressions with one version of PCRE for use with a different version is not
|
||||
guaranteed to work and may cause crashes.
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">SAVING A COMPILED PATTERN</a><br>
|
||||
<P>
|
||||
@@ -120,21 +124,25 @@ usual way.
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">COMPATIBILITY WITH DIFFERENT PCRE RELEASES</a><br>
|
||||
<P>
|
||||
The layout of the control block that is at the start of the data that makes up
|
||||
a compiled pattern was changed for release 5.0. If you have any saved patterns
|
||||
that were compiled with previous releases (not a facility that was previously
|
||||
advertised), you will have to recompile them for release 5.0. However, from now
|
||||
on, it should be possible to make changes in a compatible manner.
|
||||
In general, it is safest to recompile all saved patterns when you update to a
|
||||
new PCRE release, though not all updates actually require this. Recompiling is
|
||||
definitely needed for release 7.2.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Notwithstanding the above, if you have any saved patterns in UTF-8 mode that
|
||||
use \p or \P that were compiled with any release up to and including 6.4, you
|
||||
will have to recompile them for release 6.5 and above.
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 01 February 2006
|
||||
Last updated: 13 June 2007
|
||||
<br>
|
||||
Copyright © 1997-2007 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -72,10 +72,25 @@ need to add
|
||||
</pre>
|
||||
(for example) to the compile command to get round this problem.
|
||||
</P>
|
||||
<br><b>
|
||||
AUTHOR
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 09 September 2004
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><b>
|
||||
REVISION
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 23 January 2008
|
||||
<br>
|
||||
Copyright © 1997-2008 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2004 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -63,7 +63,7 @@ frame for each matched character. For a long string, a lot of stack is
|
||||
required. Consider now this rewritten pattern, which matches exactly the same
|
||||
strings:
|
||||
<pre>
|
||||
([^<]++|<(?!inet))
|
||||
([^<]++|<(?!inet))+
|
||||
</pre>
|
||||
This uses very much less stack, because runs of characters that do not contain
|
||||
"<" are "swallowed" in one item inside the parentheses. Recursion happens only
|
||||
@@ -73,33 +73,30 @@ backtracking into the runs of non-"<" characters, but that is not related to
|
||||
stack usage.
|
||||
</P>
|
||||
<P>
|
||||
This example shows that one way of avoiding stack problems when matching long
|
||||
subject strings is to write repeated parenthesized subpatterns to match more
|
||||
than one character whenever possible.
|
||||
</P>
|
||||
<br><b>
|
||||
Compiling PCRE to use heap instead of stack
|
||||
</b><br>
|
||||
<P>
|
||||
In environments where stack memory is constrained, you might want to compile
|
||||
PCRE to use heap memory instead of stack for remembering back-up points. This
|
||||
makes it run a lot more slowly, however. Details of how to do this are given in
|
||||
the
|
||||
<a href="pcrebuild.html"><b>pcrebuild</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
<P>
|
||||
In Unix-like environments, there is not often a problem with the stack, though
|
||||
the default limit on stack size varies from system to system. Values from 8Mb
|
||||
to 64Mb are common. You can find your default limit by running the command:
|
||||
<pre>
|
||||
ulimit -s
|
||||
</pre>
|
||||
The effect of running out of stack is often SIGSEGV, though sometimes an error
|
||||
message is given. You can normally increase the limit on stack size by code
|
||||
such as this:
|
||||
<pre>
|
||||
struct rlimit rlim;
|
||||
getrlimit(RLIMIT_STACK, &rlim);
|
||||
rlim.rlim_cur = 100*1024*1024;
|
||||
setrlimit(RLIMIT_STACK, &rlim);
|
||||
</pre>
|
||||
This reads the current limits (soft and hard) using <b>getrlimit()</b>, then
|
||||
attempts to increase the soft limit to 100Mb using <b>setrlimit()</b>. You must
|
||||
do this before calling <b>pcre_exec()</b>.
|
||||
documentation. When built in this way, instead of using the stack, PCRE obtains
|
||||
and frees memory by calling the functions that are pointed to by the
|
||||
<b>pcre_stack_malloc</b> and <b>pcre_stack_free</b> variables. By default, these
|
||||
point to <b>malloc()</b> and <b>free()</b>, but you can replace the pointers to
|
||||
cause PCRE to use your own functions. Since the block sizes are always the
|
||||
same, and are always freed in reverse order, it may be possible to implement
|
||||
customized memory handlers that are more efficient than the standard functions.
|
||||
</P>
|
||||
<br><b>
|
||||
Limiting PCRE's stack usage
|
||||
</b><br>
|
||||
<P>
|
||||
PCRE has an internal counter that can be used to limit the depth of recursion,
|
||||
and thus cause <b>pcre_exec()</b> to give an error code before it runs out of
|
||||
@@ -116,12 +113,60 @@ As a very rough rule of thumb, you should reckon on about 500 bytes per
|
||||
recursion. Thus, if you want to limit your stack usage to 8Mb, you
|
||||
should set the limit at 16000 recursions. A 64Mb stack, on the other hand, can
|
||||
support around 128000 recursions. The <b>pcretest</b> test program has a command
|
||||
line option (<b>-S</b>) that can be used to increase its stack.
|
||||
line option (<b>-S</b>) that can be used to increase the size of its stack.
|
||||
</P>
|
||||
<br><b>
|
||||
Changing stack size in Unix-like systems
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 29 June 2006
|
||||
In Unix-like environments, there is not often a problem with the stack unless
|
||||
very long strings are involved, though the default limit on stack size varies
|
||||
from system to system. Values from 8Mb to 64Mb are common. You can find your
|
||||
default limit by running the command:
|
||||
<pre>
|
||||
ulimit -s
|
||||
</pre>
|
||||
Unfortunately, the effect of running out of stack is often SIGSEGV, though
|
||||
sometimes a more explicit error message is given. You can normally increase the
|
||||
limit on stack size by code such as this:
|
||||
<pre>
|
||||
struct rlimit rlim;
|
||||
getrlimit(RLIMIT_STACK, &rlim);
|
||||
rlim.rlim_cur = 100*1024*1024;
|
||||
setrlimit(RLIMIT_STACK, &rlim);
|
||||
</pre>
|
||||
This reads the current limits (soft and hard) using <b>getrlimit()</b>, then
|
||||
attempts to increase the soft limit to 100Mb using <b>setrlimit()</b>. You must
|
||||
do this before calling <b>pcre_exec()</b>.
|
||||
</P>
|
||||
<br><b>
|
||||
Changing stack size in Mac OS X
|
||||
</b><br>
|
||||
<P>
|
||||
Using <b>setrlimit()</b>, as described above, should also work on Mac OS X. It
|
||||
is also possible to set a stack size when linking a program. There is a
|
||||
discussion about stack sizes in Mac OS X at this web site:
|
||||
<a href="http://developer.apple.com/qa/qa2005/qa1419.html">http://developer.apple.com/qa/qa2005/qa1419.html.</a>
|
||||
</P>
|
||||
<br><b>
|
||||
AUTHOR
|
||||
</b><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><b>
|
||||
REVISION
|
||||
</b><br>
|
||||
<P>
|
||||
Last updated: 09 July 2008
|
||||
<br>
|
||||
Copyright © 1997-2008 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
@@ -0,0 +1,473 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>pcresyntax specification</title>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" text="#00005A" link="#0066FF" alink="#3399FF" vlink="#2222BB">
|
||||
<h1>pcresyntax man page</h1>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
<p>
|
||||
This page is part of the PCRE HTML documentation. It was generated automatically
|
||||
from the original man page. If there is any nonsense in it, please consult the
|
||||
man page, in case the conversion went wrong.
|
||||
<br>
|
||||
<ul>
|
||||
<li><a name="TOC1" href="#SEC1">PCRE REGULAR EXPRESSION SYNTAX SUMMARY</a>
|
||||
<li><a name="TOC2" href="#SEC2">QUOTING</a>
|
||||
<li><a name="TOC3" href="#SEC3">CHARACTERS</a>
|
||||
<li><a name="TOC4" href="#SEC4">CHARACTER TYPES</a>
|
||||
<li><a name="TOC5" href="#SEC5">GENERAL CATEGORY PROPERTY CODES FOR \p and \P</a>
|
||||
<li><a name="TOC6" href="#SEC6">SCRIPT NAMES FOR \p AND \P</a>
|
||||
<li><a name="TOC7" href="#SEC7">CHARACTER CLASSES</a>
|
||||
<li><a name="TOC8" href="#SEC8">QUANTIFIERS</a>
|
||||
<li><a name="TOC9" href="#SEC9">ANCHORS AND SIMPLE ASSERTIONS</a>
|
||||
<li><a name="TOC10" href="#SEC10">MATCH POINT RESET</a>
|
||||
<li><a name="TOC11" href="#SEC11">ALTERNATION</a>
|
||||
<li><a name="TOC12" href="#SEC12">CAPTURING</a>
|
||||
<li><a name="TOC13" href="#SEC13">ATOMIC GROUPS</a>
|
||||
<li><a name="TOC14" href="#SEC14">COMMENT</a>
|
||||
<li><a name="TOC15" href="#SEC15">OPTION SETTING</a>
|
||||
<li><a name="TOC16" href="#SEC16">LOOKAHEAD AND LOOKBEHIND ASSERTIONS</a>
|
||||
<li><a name="TOC17" href="#SEC17">BACKREFERENCES</a>
|
||||
<li><a name="TOC18" href="#SEC18">SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)</a>
|
||||
<li><a name="TOC19" href="#SEC19">CONDITIONAL PATTERNS</a>
|
||||
<li><a name="TOC20" href="#SEC20">BACKTRACKING CONTROL</a>
|
||||
<li><a name="TOC21" href="#SEC21">NEWLINE CONVENTIONS</a>
|
||||
<li><a name="TOC22" href="#SEC22">WHAT \R MATCHES</a>
|
||||
<li><a name="TOC23" href="#SEC23">CALLOUTS</a>
|
||||
<li><a name="TOC24" href="#SEC24">SEE ALSO</a>
|
||||
<li><a name="TOC25" href="#SEC25">AUTHOR</a>
|
||||
<li><a name="TOC26" href="#SEC26">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">PCRE REGULAR EXPRESSION SYNTAX SUMMARY</a><br>
|
||||
<P>
|
||||
The full syntax and semantics of the regular expressions that are supported by
|
||||
PCRE are described in the
|
||||
<a href="pcrepattern.html"><b>pcrepattern</b></a>
|
||||
documentation. This document contains just a quick-reference summary of the
|
||||
syntax.
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">QUOTING</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
\x where x is non-alphanumeric is a literal x
|
||||
\Q...\E treat enclosed characters as literal
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">CHARACTERS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
\a alarm, that is, the BEL character (hex 07)
|
||||
\cx "control-x", where x is any character
|
||||
\e escape (hex 1B)
|
||||
\f formfeed (hex 0C)
|
||||
\n newline (hex 0A)
|
||||
\r carriage return (hex 0D)
|
||||
\t tab (hex 09)
|
||||
\ddd character with octal code ddd, or backreference
|
||||
\xhh character with hex code hh
|
||||
\x{hhh..} character with hex code hhh..
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC4" href="#TOC1">CHARACTER TYPES</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
. any character except newline;
|
||||
in dotall mode, any character whatsoever
|
||||
\C one byte, even in UTF-8 mode (best avoided)
|
||||
\d a decimal digit
|
||||
\D a character that is not a decimal digit
|
||||
\h a horizontal whitespace character
|
||||
\H a character that is not a horizontal whitespace character
|
||||
\p{<i>xx</i>} a character with the <i>xx</i> property
|
||||
\P{<i>xx</i>} a character without the <i>xx</i> property
|
||||
\R a newline sequence
|
||||
\s a whitespace character
|
||||
\S a character that is not a whitespace character
|
||||
\v a vertical whitespace character
|
||||
\V a character that is not a vertical whitespace character
|
||||
\w a "word" character
|
||||
\W a "non-word" character
|
||||
\X an extended Unicode sequence
|
||||
</pre>
|
||||
In PCRE, \d, \D, \s, \S, \w, and \W recognize only ASCII characters.
|
||||
</P>
|
||||
<br><a name="SEC5" href="#TOC1">GENERAL CATEGORY PROPERTY CODES FOR \p and \P</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
C Other
|
||||
Cc Control
|
||||
Cf Format
|
||||
Cn Unassigned
|
||||
Co Private use
|
||||
Cs Surrogate
|
||||
|
||||
L Letter
|
||||
Ll Lower case letter
|
||||
Lm Modifier letter
|
||||
Lo Other letter
|
||||
Lt Title case letter
|
||||
Lu Upper case letter
|
||||
L& Ll, Lu, or Lt
|
||||
|
||||
M Mark
|
||||
Mc Spacing mark
|
||||
Me Enclosing mark
|
||||
Mn Non-spacing mark
|
||||
|
||||
N Number
|
||||
Nd Decimal number
|
||||
Nl Letter number
|
||||
No Other number
|
||||
|
||||
P Punctuation
|
||||
Pc Connector punctuation
|
||||
Pd Dash punctuation
|
||||
Pe Close punctuation
|
||||
Pf Final punctuation
|
||||
Pi Initial punctuation
|
||||
Po Other punctuation
|
||||
Ps Open punctuation
|
||||
|
||||
S Symbol
|
||||
Sc Currency symbol
|
||||
Sk Modifier symbol
|
||||
Sm Mathematical symbol
|
||||
So Other symbol
|
||||
|
||||
Z Separator
|
||||
Zl Line separator
|
||||
Zp Paragraph separator
|
||||
Zs Space separator
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">SCRIPT NAMES FOR \p AND \P</a><br>
|
||||
<P>
|
||||
Arabic,
|
||||
Armenian,
|
||||
Balinese,
|
||||
Bengali,
|
||||
Bopomofo,
|
||||
Braille,
|
||||
Buginese,
|
||||
Buhid,
|
||||
Canadian_Aboriginal,
|
||||
Carian,
|
||||
Cham,
|
||||
Cherokee,
|
||||
Common,
|
||||
Coptic,
|
||||
Cuneiform,
|
||||
Cypriot,
|
||||
Cyrillic,
|
||||
Deseret,
|
||||
Devanagari,
|
||||
Ethiopic,
|
||||
Georgian,
|
||||
Glagolitic,
|
||||
Gothic,
|
||||
Greek,
|
||||
Gujarati,
|
||||
Gurmukhi,
|
||||
Han,
|
||||
Hangul,
|
||||
Hanunoo,
|
||||
Hebrew,
|
||||
Hiragana,
|
||||
Inherited,
|
||||
Kannada,
|
||||
Katakana,
|
||||
Kayah_Li,
|
||||
Kharoshthi,
|
||||
Khmer,
|
||||
Lao,
|
||||
Latin,
|
||||
Lepcha,
|
||||
Limbu,
|
||||
Linear_B,
|
||||
Lycian,
|
||||
Lydian,
|
||||
Malayalam,
|
||||
Mongolian,
|
||||
Myanmar,
|
||||
New_Tai_Lue,
|
||||
Nko,
|
||||
Ogham,
|
||||
Old_Italic,
|
||||
Old_Persian,
|
||||
Ol_Chiki,
|
||||
Oriya,
|
||||
Osmanya,
|
||||
Phags_Pa,
|
||||
Phoenician,
|
||||
Rejang,
|
||||
Runic,
|
||||
Saurashtra,
|
||||
Shavian,
|
||||
Sinhala,
|
||||
Sudanese,
|
||||
Syloti_Nagri,
|
||||
Syriac,
|
||||
Tagalog,
|
||||
Tagbanwa,
|
||||
Tai_Le,
|
||||
Tamil,
|
||||
Telugu,
|
||||
Thaana,
|
||||
Thai,
|
||||
Tibetan,
|
||||
Tifinagh,
|
||||
Ugaritic,
|
||||
Vai,
|
||||
Yi.
|
||||
</P>
|
||||
<br><a name="SEC7" href="#TOC1">CHARACTER CLASSES</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
[...] positive character class
|
||||
[^...] negative character class
|
||||
[x-y] range (can be used for hex characters)
|
||||
[[:xxx:]] positive POSIX named set
|
||||
[[:^xxx:]] negative POSIX named set
|
||||
|
||||
alnum alphanumeric
|
||||
alpha alphabetic
|
||||
ascii 0-127
|
||||
blank space or tab
|
||||
cntrl control character
|
||||
digit decimal digit
|
||||
graph printing, excluding space
|
||||
lower lower case letter
|
||||
print printing, including space
|
||||
punct printing, excluding alphanumeric
|
||||
space whitespace
|
||||
upper upper case letter
|
||||
word same as \w
|
||||
xdigit hexadecimal digit
|
||||
</pre>
|
||||
In PCRE, POSIX character set names recognize only ASCII characters. You can use
|
||||
\Q...\E inside a character class.
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">QUANTIFIERS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
? 0 or 1, greedy
|
||||
?+ 0 or 1, possessive
|
||||
?? 0 or 1, lazy
|
||||
* 0 or more, greedy
|
||||
*+ 0 or more, possessive
|
||||
*? 0 or more, lazy
|
||||
+ 1 or more, greedy
|
||||
++ 1 or more, possessive
|
||||
+? 1 or more, lazy
|
||||
{n} exactly n
|
||||
{n,m} at least n, no more than m, greedy
|
||||
{n,m}+ at least n, no more than m, possessive
|
||||
{n,m}? at least n, no more than m, lazy
|
||||
{n,} n or more, greedy
|
||||
{n,}+ n or more, possessive
|
||||
{n,}? n or more, lazy
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC9" href="#TOC1">ANCHORS AND SIMPLE ASSERTIONS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
\b word boundary (only ASCII letters recognized)
|
||||
\B not a word boundary
|
||||
^ start of subject
|
||||
also after internal newline in multiline mode
|
||||
\A start of subject
|
||||
$ end of subject
|
||||
also before newline at end of subject
|
||||
also before internal newline in multiline mode
|
||||
\Z end of subject
|
||||
also before newline at end of subject
|
||||
\z end of subject
|
||||
\G first matching position in subject
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC10" href="#TOC1">MATCH POINT RESET</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
\K reset start of match
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC11" href="#TOC1">ALTERNATION</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
expr|expr|expr...
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC12" href="#TOC1">CAPTURING</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(...) capturing group
|
||||
(?<name>...) named capturing group (Perl)
|
||||
(?'name'...) named capturing group (Perl)
|
||||
(?P<name>...) named capturing group (Python)
|
||||
(?:...) non-capturing group
|
||||
(?|...) non-capturing group; reset group numbers for
|
||||
capturing groups in each alternative
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC13" href="#TOC1">ATOMIC GROUPS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?>...) atomic, non-capturing group
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC14" href="#TOC1">COMMENT</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?#....) comment (not nestable)
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC15" href="#TOC1">OPTION SETTING</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?i) caseless
|
||||
(?J) allow duplicate names
|
||||
(?m) multiline
|
||||
(?s) single line (dotall)
|
||||
(?U) default ungreedy (lazy)
|
||||
(?x) extended (ignore white space)
|
||||
(?-...) unset option(s)
|
||||
</pre>
|
||||
The following is recognized only at the start of a pattern or after one of the
|
||||
newline-setting options with similar syntax:
|
||||
<pre>
|
||||
(*UTF8) set UTF-8 mode
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC16" href="#TOC1">LOOKAHEAD AND LOOKBEHIND ASSERTIONS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?=...) positive look ahead
|
||||
(?!...) negative look ahead
|
||||
(?<=...) positive look behind
|
||||
(?<!...) negative look behind
|
||||
</pre>
|
||||
Each top-level branch of a look behind must be of a fixed length.
|
||||
</P>
|
||||
<br><a name="SEC17" href="#TOC1">BACKREFERENCES</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
\n reference by number (can be ambiguous)
|
||||
\gn reference by number
|
||||
\g{n} reference by number
|
||||
\g{-n} relative reference by number
|
||||
\k<name> reference by name (Perl)
|
||||
\k'name' reference by name (Perl)
|
||||
\g{name} reference by name (Perl)
|
||||
\k{name} reference by name (.NET)
|
||||
(?P=name) reference by name (Python)
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC18" href="#TOC1">SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?R) recurse whole pattern
|
||||
(?n) call subpattern by absolute number
|
||||
(?+n) call subpattern by relative number
|
||||
(?-n) call subpattern by relative number
|
||||
(?&name) call subpattern by name (Perl)
|
||||
(?P>name) call subpattern by name (Python)
|
||||
\g<name> call subpattern by name (Oniguruma)
|
||||
\g'name' call subpattern by name (Oniguruma)
|
||||
\g<n> call subpattern by absolute number (Oniguruma)
|
||||
\g'n' call subpattern by absolute number (Oniguruma)
|
||||
\g<+n> call subpattern by relative number (PCRE extension)
|
||||
\g'+n' call subpattern by relative number (PCRE extension)
|
||||
\g<-n> call subpattern by relative number (PCRE extension)
|
||||
\g'-n' call subpattern by relative number (PCRE extension)
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC19" href="#TOC1">CONDITIONAL PATTERNS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?(condition)yes-pattern)
|
||||
(?(condition)yes-pattern|no-pattern)
|
||||
|
||||
(?(n)... absolute reference condition
|
||||
(?(+n)... relative reference condition
|
||||
(?(-n)... relative reference condition
|
||||
(?(<name>)... named reference condition (Perl)
|
||||
(?('name')... named reference condition (Perl)
|
||||
(?(name)... named reference condition (PCRE)
|
||||
(?(R)... overall recursion condition
|
||||
(?(Rn)... specific group recursion condition
|
||||
(?(R&name)... specific recursion condition
|
||||
(?(DEFINE)... define subpattern for reference
|
||||
(?(assert)... assertion condition
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC20" href="#TOC1">BACKTRACKING CONTROL</a><br>
|
||||
<P>
|
||||
The following act immediately they are reached:
|
||||
<pre>
|
||||
(*ACCEPT) force successful match
|
||||
(*FAIL) force backtrack; synonym (*F)
|
||||
</pre>
|
||||
The following act only when a subsequent match failure causes a backtrack to
|
||||
reach them. They all force a match failure, but they differ in what happens
|
||||
afterwards. Those that advance the start-of-match point do so only if the
|
||||
pattern is not anchored.
|
||||
<pre>
|
||||
(*COMMIT) overall failure, no advance of starting point
|
||||
(*PRUNE) advance to next starting character
|
||||
(*SKIP) advance start to current matching position
|
||||
(*THEN) local failure, backtrack to next alternation
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC21" href="#TOC1">NEWLINE CONVENTIONS</a><br>
|
||||
<P>
|
||||
These are recognized only at the very start of the pattern or after a
|
||||
(*BSR_...) or (*UTF8) option.
|
||||
<pre>
|
||||
(*CR) carriage return only
|
||||
(*LF) linefeed only
|
||||
(*CRLF) carriage return followed by linefeed
|
||||
(*ANYCRLF) all three of the above
|
||||
(*ANY) any Unicode newline sequence
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC22" href="#TOC1">WHAT \R MATCHES</a><br>
|
||||
<P>
|
||||
These are recognized only at the very start of the pattern or after a
|
||||
(*...) option that sets the newline convention or UTF-8 mode.
|
||||
<pre>
|
||||
(*BSR_ANYCRLF) CR, LF, or CRLF
|
||||
(*BSR_UNICODE) any Unicode newline sequence
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC23" href="#TOC1">CALLOUTS</a><br>
|
||||
<P>
|
||||
<pre>
|
||||
(?C) callout
|
||||
(?Cn) callout with data n
|
||||
</PRE>
|
||||
</P>
|
||||
<br><a name="SEC24" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
<b>pcrepattern</b>(3), <b>pcreapi</b>(3), <b>pcrecallout</b>(3),
|
||||
<b>pcrematching</b>(3), <b>pcre</b>(3).
|
||||
</P>
|
||||
<br><a name="SEC25" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
</P>
|
||||
<br><a name="SEC26" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 11 April 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
@@ -23,8 +23,11 @@ man page, in case the conversion went wrong.
|
||||
<li><a name="TOC8" href="#SEC8">OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION</a>
|
||||
<li><a name="TOC9" href="#SEC9">RESTARTING AFTER A PARTIAL MATCH</a>
|
||||
<li><a name="TOC10" href="#SEC10">CALLOUTS</a>
|
||||
<li><a name="TOC11" href="#SEC11">SAVING AND RELOADING COMPILED PATTERNS</a>
|
||||
<li><a name="TOC12" href="#SEC12">AUTHOR</a>
|
||||
<li><a name="TOC11" href="#SEC11">NON-PRINTING CHARACTERS</a>
|
||||
<li><a name="TOC12" href="#SEC12">SAVING AND RELOADING COMPILED PATTERNS</a>
|
||||
<li><a name="TOC13" href="#SEC13">SEE ALSO</a>
|
||||
<li><a name="TOC14" href="#SEC14">AUTHOR</a>
|
||||
<li><a name="TOC15" href="#SEC15">REVISION</a>
|
||||
</ul>
|
||||
<br><a name="SEC1" href="#TOC1">SYNOPSIS</a><br>
|
||||
<P>
|
||||
@@ -43,6 +46,11 @@ documentation.
|
||||
</P>
|
||||
<br><a name="SEC2" href="#TOC1">OPTIONS</a><br>
|
||||
<P>
|
||||
<b>-b</b>
|
||||
Behave as if each regex has the <b>/B</b> (show bytecode) modifier; the internal
|
||||
form is output after compilation.
|
||||
</P>
|
||||
<P>
|
||||
<b>-C</b>
|
||||
Output the version number of the PCRE library, and all available information
|
||||
about the optional features that are included, and then exit.
|
||||
@@ -50,7 +58,8 @@ about the optional features that are included, and then exit.
|
||||
<P>
|
||||
<b>-d</b>
|
||||
Behave as if each regex has the <b>/D</b> (debug) modifier; the internal
|
||||
form is output after compilation.
|
||||
form and information about the compiled pattern is output after compilation;
|
||||
<b>-d</b> is equivalent to <b>-b -i</b>.
|
||||
</P>
|
||||
<P>
|
||||
<b>-dfa</b>
|
||||
@@ -59,11 +68,21 @@ alternative matching function, <b>pcre_dfa_exec()</b>, to be used instead of the
|
||||
standard <b>pcre_exec()</b> function (more detail is given below).
|
||||
</P>
|
||||
<P>
|
||||
<b>-help</b>
|
||||
Output a brief summary these options and then exit.
|
||||
</P>
|
||||
<P>
|
||||
<b>-i</b>
|
||||
Behave as if each regex has the <b>/I</b> modifier; information about the
|
||||
compiled pattern is given after compilation.
|
||||
</P>
|
||||
<P>
|
||||
<b>-M</b>
|
||||
Behave as if each data line contains the \M escape sequence; this causes
|
||||
PCRE to discover the minimum MATCH_LIMIT and MATCH_LIMIT_RECURSION settings by
|
||||
calling <b>pcre_exec()</b> repeatedly with different limits.
|
||||
</P>
|
||||
<P>
|
||||
<b>-m</b>
|
||||
Output the size of each compiled pattern after it has been compiled. This is
|
||||
equivalent to adding <b>/M</b> to each regular expression. For compatibility
|
||||
@@ -72,9 +91,11 @@ with earlier versions of pcretest, <b>-s</b> is a synonym for <b>-m</b>.
|
||||
<P>
|
||||
<b>-o</b> <i>osize</i>
|
||||
Set the number of elements in the output vector that is used when calling
|
||||
<b>pcre_exec()</b> to be <i>osize</i>. The default value is 45, which is enough
|
||||
for 14 capturing subexpressions. The vector size can be changed for individual
|
||||
matching calls by including \O in the data line (see below).
|
||||
<b>pcre_exec()</b> or <b>pcre_dfa_exec()</b> to be <i>osize</i>. The default value
|
||||
is 45, which is enough for 14 capturing subexpressions for <b>pcre_exec()</b> or
|
||||
22 different matches for <b>pcre_dfa_exec()</b>. The vector size can be
|
||||
changed for individual matching calls by including \O in the data line (see
|
||||
below).
|
||||
</P>
|
||||
<P>
|
||||
<b>-p</b>
|
||||
@@ -96,7 +117,15 @@ megabytes.
|
||||
Run each compile, study, and match many times with a timer, and output
|
||||
resulting time per compile or match (in milliseconds). Do not set <b>-m</b> with
|
||||
<b>-t</b>, because you will then get the size output a zillion times, and the
|
||||
timing will be distorted.
|
||||
timing will be distorted. You can control the number of iterations that are
|
||||
used for timing by following <b>-t</b> with a number (as a separate item on the
|
||||
command line). For example, "-t 1000" would iterate 1000 times. The default is
|
||||
to iterate 500000 times.
|
||||
</P>
|
||||
<P>
|
||||
<b>-tm</b>
|
||||
This is like <b>-t</b> except that it times only the matching phase, not the
|
||||
compile or study phases.
|
||||
</P>
|
||||
<br><a name="SEC3" href="#TOC1">DESCRIPTION</a><br>
|
||||
<P>
|
||||
@@ -107,6 +136,13 @@ stdout, and prompts for each line of input, using "re>" to prompt for regula
|
||||
expressions, and "data>" to prompt for data lines.
|
||||
</P>
|
||||
<P>
|
||||
When <b>pcretest</b> is built, a configuration option can specify that it should
|
||||
be linked with the <b>libreadline</b> library. When this is done, if the input
|
||||
is from a terminal, it is read using the <b>readline()</b> function. This
|
||||
provides line-editing and history facilities. The output from the <b>-help</b>
|
||||
option states whether or not <b>readline()</b> will be used.
|
||||
</P>
|
||||
<P>
|
||||
The program handles any number of sets of input on a single input file. Each
|
||||
set starts with a regular expression, and continues with any number of data
|
||||
lines to be matched against the pattern.
|
||||
@@ -114,8 +150,8 @@ lines to be matched against the pattern.
|
||||
<P>
|
||||
Each data line is matched separately and independently. If you want to do
|
||||
multi-line matches, you have to use the \n escape sequence (or \r or \r\n,
|
||||
depending on the newline setting) in a single line of input to encode the
|
||||
newline characters. There is no limit on the length of data lines; the input
|
||||
etc., depending on the newline setting) in a single line of input to encode the
|
||||
newline sequences. There is no limit on the length of data lines; the input
|
||||
buffer is automatically extended if it is too small.
|
||||
</P>
|
||||
<P>
|
||||
@@ -168,20 +204,30 @@ effect as they do in Perl. For example:
|
||||
The following table shows additional modifiers for setting PCRE options that do
|
||||
not correspond to anything in Perl:
|
||||
<pre>
|
||||
<b>/A</b> PCRE_ANCHORED
|
||||
<b>/C</b> PCRE_AUTO_CALLOUT
|
||||
<b>/E</b> PCRE_DOLLAR_ENDONLY
|
||||
<b>/f</b> PCRE_FIRSTLINE
|
||||
<b>/J</b> PCRE_DUPNAMES
|
||||
<b>/N</b> PCRE_NO_AUTO_CAPTURE
|
||||
<b>/U</b> PCRE_UNGREEDY
|
||||
<b>/X</b> PCRE_EXTRA
|
||||
<b>/<cr></b> PCRE_NEWLINE_CR
|
||||
<b>/<lf></b> PCRE_NEWLINE_LF
|
||||
<b>/<crlf></b> PCRE_NEWLINE_CRLF
|
||||
<b>/A</b> PCRE_ANCHORED
|
||||
<b>/C</b> PCRE_AUTO_CALLOUT
|
||||
<b>/E</b> PCRE_DOLLAR_ENDONLY
|
||||
<b>/f</b> PCRE_FIRSTLINE
|
||||
<b>/J</b> PCRE_DUPNAMES
|
||||
<b>/N</b> PCRE_NO_AUTO_CAPTURE
|
||||
<b>/U</b> PCRE_UNGREEDY
|
||||
<b>/X</b> PCRE_EXTRA
|
||||
<b>/<JS></b> PCRE_JAVASCRIPT_COMPAT
|
||||
<b>/<cr></b> PCRE_NEWLINE_CR
|
||||
<b>/<lf></b> PCRE_NEWLINE_LF
|
||||
<b>/<crlf></b> PCRE_NEWLINE_CRLF
|
||||
<b>/<anycrlf></b> PCRE_NEWLINE_ANYCRLF
|
||||
<b>/<any></b> PCRE_NEWLINE_ANY
|
||||
<b>/<bsr_anycrlf></b> PCRE_BSR_ANYCRLF
|
||||
<b>/<bsr_unicode></b> PCRE_BSR_UNICODE
|
||||
</pre>
|
||||
Those specifying line endings are literal strings as shown. Details of the
|
||||
meanings of these PCRE options are given in the
|
||||
Those specifying line ending sequences are literal strings as shown, but the
|
||||
letters can be in either case. This example sets multiline matching with CRLF
|
||||
as the line ending sequence:
|
||||
<pre>
|
||||
/^abc/m<crlf>
|
||||
</pre>
|
||||
Details of the meanings of these PCRE options are given in the
|
||||
<a href="pcreapi.html"><b>pcreapi</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
@@ -220,6 +266,14 @@ the subject string. This is useful for tests where the subject contains
|
||||
multiple copies of the same substring.
|
||||
</P>
|
||||
<P>
|
||||
The <b>/B</b> modifier is a debugging feature. It requests that <b>pcretest</b>
|
||||
output a representation of the compiled byte code after compilation. Normally
|
||||
this information contains length and offset values; however, if <b>/Z</b> is
|
||||
also present, this data is replaced by spaces. This is a special feature for
|
||||
use in the automatic test scripts; it ensures that the same output is generated
|
||||
for different internal link sizes.
|
||||
</P>
|
||||
<P>
|
||||
The <b>/L</b> modifier must be followed directly by the name of a locale, for
|
||||
example,
|
||||
<pre>
|
||||
@@ -238,10 +292,8 @@ so on). It does this by calling <b>pcre_fullinfo()</b> after compiling a
|
||||
pattern. If the pattern is studied, the results of that are also output.
|
||||
</P>
|
||||
<P>
|
||||
The <b>/D</b> modifier is a PCRE debugging feature, which also assumes <b>/I</b>.
|
||||
It causes the internal form of compiled regular expressions to be output after
|
||||
compilation. If the pattern was studied, the information returned is also
|
||||
output.
|
||||
The <b>/D</b> modifier is a PCRE debugging feature, and is equivalent to
|
||||
<b>/BI</b>, that is, both the <b>/B</b> and the <b>/I</b> modifiers.
|
||||
</P>
|
||||
<P>
|
||||
The <b>/F</b> modifier causes <b>pcretest</b> to flip the byte order of the
|
||||
@@ -289,15 +341,15 @@ complicated features of PCRE. If you are just testing "ordinary" regular
|
||||
expressions, you probably don't need any of these. The following escapes are
|
||||
recognized:
|
||||
<pre>
|
||||
\a alarm (= BEL)
|
||||
\b backspace
|
||||
\e escape
|
||||
\f formfeed
|
||||
\n newline
|
||||
\a alarm (BEL, \x07)
|
||||
\b backspace (\x08)
|
||||
\e escape (\x27)
|
||||
\f formfeed (\x0c)
|
||||
\n newline (\x0a)
|
||||
\qdd set the PCRE_MATCH_LIMIT limit to dd (any number of digits)
|
||||
\r carriage return
|
||||
\t tab
|
||||
\v vertical tab
|
||||
\r carriage return (\x0d)
|
||||
\t tab (\x09)
|
||||
\v vertical tab (\x0b)
|
||||
\nnn octal character (up to 3 octal digits)
|
||||
\xhh hexadecimal character (up to 2 hex digits)
|
||||
\x{hh...} hexadecimal character, any number of digits in UTF-8 mode
|
||||
@@ -331,11 +383,17 @@ recognized:
|
||||
\<cr> pass the PCRE_NEWLINE_CR option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>
|
||||
\<lf> pass the PCRE_NEWLINE_LF option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>
|
||||
\<crlf> pass the PCRE_NEWLINE_CRLF option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>
|
||||
\<anycrlf> pass the PCRE_NEWLINE_ANYCRLF option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>
|
||||
\<any> pass the PCRE_NEWLINE_ANY option to <b>pcre_exec()</b> or <b>pcre_dfa_exec()</b>
|
||||
</pre>
|
||||
The escapes that specify line endings are literal strings, exactly as shown.
|
||||
A backslash followed by anything else just escapes the anything else. If the
|
||||
very last character is a backslash, it is ignored. This gives a way of passing
|
||||
an empty line as data, since a real empty line terminates the data input.
|
||||
The escapes that specify line ending sequences are literal strings, exactly as
|
||||
shown. No more than one newline setting should be present in any data line.
|
||||
</P>
|
||||
<P>
|
||||
A backslash followed by anything else just escapes the anything else. If
|
||||
the very last character is a backslash, it is ignored. This gives a way of
|
||||
passing an empty line as data, since a real empty line terminates the data
|
||||
input.
|
||||
</P>
|
||||
<P>
|
||||
If \M is present, <b>pcretest</b> calls <b>pcre_exec()</b> several times, with
|
||||
@@ -365,7 +423,10 @@ and \Z, causing REG_NOTBOL and REG_NOTEOL, respectively, to be passed to
|
||||
The use of \x{hh...} to represent UTF-8 characters is not dependent on the use
|
||||
of the <b>/8</b> modifier on the pattern. It is recognized always. There may be
|
||||
any number of hexadecimal digits inside the braces. The result is from one to
|
||||
six bytes, encoded according to the UTF-8 rules.
|
||||
six bytes, encoded according to the original UTF-8 rules of RFC 2279. This
|
||||
allows for values in the range 0 to 0x7FFFFFFF. Note that not all of those are
|
||||
valid Unicode code points, or indeed valid UTF-8 characters according to the
|
||||
later rules in RFC 3629.
|
||||
</P>
|
||||
<br><a name="SEC6" href="#TOC1">THE ALTERNATIVE MATCHING FUNCTION</a><br>
|
||||
<P>
|
||||
@@ -398,7 +459,7 @@ respectively, and otherwise the PCRE negative error number. Here is an example
|
||||
of an interactive <b>pcretest</b> run.
|
||||
<pre>
|
||||
$ pcretest
|
||||
PCRE version 5.00 07-Sep-2004
|
||||
PCRE version 7.0 30-Nov-2006
|
||||
|
||||
re> /^abc(\d+)/
|
||||
data> abc123
|
||||
@@ -407,11 +468,26 @@ of an interactive <b>pcretest</b> run.
|
||||
data> xyz
|
||||
No match
|
||||
</pre>
|
||||
Note that unset capturing substrings that are not followed by one that is set
|
||||
are not returned by <b>pcre_exec()</b>, and are not shown by <b>pcretest</b>. In
|
||||
the following example, there are two capturing substrings, but when the first
|
||||
data line is matched, the second, unset substring is not shown. An "internal"
|
||||
unset substring is shown as "<unset>", as for the second data line.
|
||||
<pre>
|
||||
re> /(a)|(b)/
|
||||
data> a
|
||||
0: a
|
||||
1: a
|
||||
data> b
|
||||
0: b
|
||||
1: <unset>
|
||||
2: b
|
||||
</pre>
|
||||
If the strings contain any non-printing characters, they are output as \0x
|
||||
escapes, or as \x{...} escapes if the <b>/8</b> modifier was present on the
|
||||
pattern. If the pattern has the <b>/+</b> modifier, the output for substring 0
|
||||
is followed by the the rest of the subject string, identified by "0+" like
|
||||
this:
|
||||
pattern. See below for the definition of non-printing characters. If the
|
||||
pattern has the <b>/+</b> modifier, the output for substring 0 is followed by
|
||||
the the rest of the subject string, identified by "0+" like this:
|
||||
<pre>
|
||||
re> /cat/+
|
||||
data> cataract
|
||||
@@ -441,10 +517,10 @@ length (that is, the return from the extraction function) is given in
|
||||
parentheses after each string for <b>\C</b> and <b>\G</b>.
|
||||
</P>
|
||||
<P>
|
||||
Note that while patterns can be continued over several lines (a plain ">"
|
||||
Note that whereas patterns can be continued over several lines (a plain ">"
|
||||
prompt is used for continuations), data lines may not. However newlines can be
|
||||
included in data by means of the \n escape (or \r or \r\n for those newline
|
||||
settings).
|
||||
included in data by means of the \n escape (or \r, \r\n, etc., depending on
|
||||
the newline sequence setting).
|
||||
</P>
|
||||
<br><a name="SEC8" href="#TOC1">OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION</a><br>
|
||||
<P>
|
||||
@@ -463,7 +539,7 @@ the subject where there is at least one match. For example:
|
||||
longest matching string is always given first (and numbered zero).
|
||||
</P>
|
||||
<P>
|
||||
If \fB/g\P is present on the pattern, the search for further matches resumes
|
||||
If <b>/g</b> is present on the pattern, the search for further matches resumes
|
||||
at the end of the longest match. For example:
|
||||
<pre>
|
||||
re> /(tang|tangerine|tan)/g
|
||||
@@ -537,7 +613,19 @@ the
|
||||
<a href="pcrecallout.html"><b>pcrecallout</b></a>
|
||||
documentation.
|
||||
</P>
|
||||
<br><a name="SEC11" href="#TOC1">SAVING AND RELOADING COMPILED PATTERNS</a><br>
|
||||
<br><a name="SEC11" href="#TOC1">NON-PRINTING CHARACTERS</a><br>
|
||||
<P>
|
||||
When <b>pcretest</b> is outputting text in the compiled version of a pattern,
|
||||
bytes other than 32-126 are always treated as non-printing characters are are
|
||||
therefore shown as hex escapes.
|
||||
</P>
|
||||
<P>
|
||||
When <b>pcretest</b> is outputting text that is a matched part of a subject
|
||||
string, it behaves in the same way, unless a different locale has been set for
|
||||
the pattern (using the <b>/L</b> modifier). In this case, the <b>isprint()</b>
|
||||
function to distinguish printing and non-printing characters.
|
||||
</P>
|
||||
<br><a name="SEC12" href="#TOC1">SAVING AND RELOADING COMPILED PATTERNS</a><br>
|
||||
<P>
|
||||
The facilities described in this section are not available when the POSIX
|
||||
inteface to PCRE is being used, that is, when the <b>/P</b> pattern modifier is
|
||||
@@ -599,18 +687,26 @@ string using a reloaded pattern is likely to cause <b>pcretest</b> to crash.
|
||||
Finally, if you attempt to load a file that is not in the correct format, the
|
||||
result is undefined.
|
||||
</P>
|
||||
<br><a name="SEC12" href="#TOC1">AUTHOR</a><br>
|
||||
<br><a name="SEC13" href="#TOC1">SEE ALSO</a><br>
|
||||
<P>
|
||||
<b>pcre</b>(3), <b>pcreapi</b>(3), <b>pcrecallout</b>(3), <b>pcrematching</b>(3),
|
||||
<b>pcrepartial</b>(d), <b>pcrepattern</b>(3), <b>pcreprecompile</b>(3).
|
||||
</P>
|
||||
<br><a name="SEC14" href="#TOC1">AUTHOR</a><br>
|
||||
<P>
|
||||
Philip Hazel
|
||||
<br>
|
||||
University Computing Service,
|
||||
University Computing Service
|
||||
<br>
|
||||
Cambridge CB2 3QH, England.
|
||||
<br>
|
||||
Cambridge CB2 3QG, England.
|
||||
</P>
|
||||
<br><a name="SEC15" href="#TOC1">REVISION</a><br>
|
||||
<P>
|
||||
Last updated: 29 June 2006
|
||||
Last updated: 10 March 2009
|
||||
<br>
|
||||
Copyright © 1997-2009 University of Cambridge.
|
||||
<br>
|
||||
Copyright © 1997-2006 University of Cambridge.
|
||||
<p>
|
||||
Return to the <a href="index.html">PCRE index page</a>.
|
||||
</p>
|
||||
|
||||
Reference in New Issue
Block a user