277 lines
12 KiB
HTML
277 lines
12 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of PCRE</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>PCRE</H1>
|
|
Section: C Library Functions (3)<BR>Updated: 10 February 2015<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
PCRE - Perl-compatible regular expressions (original API)
|
|
<A NAME="lbAC"> </A>
|
|
<H2>PLEASE TAKE NOTE</H2>
|
|
|
|
|
|
<P>
|
|
This document relates to PCRE releases that use the original API,
|
|
with library names libpcre, libpcre16, and libpcre32. January 2015 saw the
|
|
first release of a new API, known as PCRE2, with release numbers starting at
|
|
10.00 and library names libpcre2-8, libpcre2-16, and libpcre2-32. The old
|
|
libraries (now called PCRE1) are still being maintained for bug fixes, but
|
|
there will be no new development. New projects are advised to use the new PCRE2
|
|
libraries.
|
|
<A NAME="lbAD"> </A>
|
|
<H2>INTRODUCTION</H2>
|
|
|
|
|
|
<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. Some features that appeared in Python and PCRE before they
|
|
appeared in Perl are also available using the Python syntax, there is some
|
|
support for one or two .NET and Oniguruma syntax items, and there is an option
|
|
for requesting some minor changes that give better JavaScript compatibility.
|
|
<P>
|
|
|
|
Starting with release 8.30, it is possible to compile two separate PCRE
|
|
libraries: the original, which supports 8-bit character strings (including
|
|
UTF-8 strings), and a second library that supports 16-bit character strings
|
|
(including UTF-16 strings). The build process allows either one or both to be
|
|
built. The majority of the work to make this possible was done by Zoltan
|
|
Herczeg.
|
|
<P>
|
|
|
|
Starting with release 8.32 it is possible to compile a third separate PCRE
|
|
library that supports 32-bit character strings (including UTF-32 strings). The
|
|
build process allows any combination of the 8-, 16- and 32-bit libraries. The
|
|
work to make this possible was done by Christian Persch.
|
|
<P>
|
|
|
|
The three libraries contain identical sets of functions, except that the names
|
|
in the 16-bit library start with <B>pcre16_</B> instead of <B>pcre_</B>, and the
|
|
names in the 32-bit library start with <B>pcre32_</B> instead of <B>pcre_</B>. To
|
|
avoid over-complication and reduce the documentation maintenance load, most of
|
|
the documentation describes the 8-bit library, with the differences for the
|
|
16-bit and 32-bit libraries described separately in the
|
|
|
|
<B>pcre16</B>
|
|
and
|
|
|
|
<B>pcre32</B>
|
|
|
|
pages. References to functions or structures of the form <I>pcre[16|32]_xxx</I>
|
|
should be read as meaning "<I>pcre_xxx</I> when using the 8-bit library,
|
|
<I>pcre16_xxx</I> when using the 16-bit library, or <I>pcre32_xxx</I> when using
|
|
the 32-bit library".
|
|
<P>
|
|
|
|
The current implementation of PCRE corresponds approximately with Perl 5.12,
|
|
including support for UTF-8/16/32 encoded strings and Unicode general category
|
|
properties. However, UTF-8/16/32 and Unicode support has to be explicitly
|
|
enabled; it is not the default. The Unicode tables correspond to Unicode
|
|
release 6.3.0.
|
|
<P>
|
|
|
|
In addition to the Perl-compatible matching function, PCRE contains an
|
|
alternative 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
|
|
|
|
<B>pcrematching</B>
|
|
|
|
page.
|
|
<P>
|
|
|
|
PCRE is written in C and released as a C library. A number of people have
|
|
written wrappers and interfaces of various kinds. In particular, Google Inc.
|
|
have provided a comprehensive C++ wrapper for the 8-bit library. This is now
|
|
included as part of the PCRE distribution. The
|
|
|
|
<B>pcrecpp</B>
|
|
|
|
page has details of this interface. Other people's contributions can be found
|
|
in the <I>Contrib</I> directory at the primary FTP site, which is:
|
|
<P>
|
|
|
|
|
|
<A HREF="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre</A>
|
|
|
|
<P>
|
|
|
|
Details of exactly which Perl regular expression features are and are not
|
|
supported by PCRE are given in separate documents. See the
|
|
|
|
<B>pcrepattern</B>
|
|
|
|
and
|
|
|
|
<B>pcrecompat</B>
|
|
|
|
pages. There is a syntax summary in the
|
|
|
|
<B>pcresyntax</B>
|
|
|
|
page.
|
|
<P>
|
|
|
|
Some features of PCRE can be included, excluded, or changed when the library is
|
|
built. The
|
|
|
|
<B>pcre_config()</B>
|
|
|
|
function makes it possible for a client to discover which features are
|
|
available. The features themselves are described in the
|
|
|
|
<B>pcrebuild</B>
|
|
|
|
page. Documentation about building PCRE for various operating systems can be
|
|
found in the
|
|
|
|
|
|
<B>README</B>
|
|
|
|
and
|
|
|
|
|
|
<B>NON-AUTOTOOLS_BUILD</B>
|
|
|
|
files in the source distribution.
|
|
<P>
|
|
|
|
The libraries contains a number of undocumented internal functions and data
|
|
tables that are used by more than one of the exported external functions, but
|
|
which are not intended for use by external callers. Their names all begin with
|
|
"_pcre_" or "_pcre16_" or "_pcre32_", which hopefully will not provoke any name
|
|
clashes. In some environments, it is possible to control which external symbols
|
|
are exported when a shared library is built, and in these cases the
|
|
undocumented symbols are not exported.
|
|
<A NAME="lbAE"> </A>
|
|
<H2>SECURITY CONSIDERATIONS</H2>
|
|
|
|
|
|
<P>
|
|
If you are using PCRE in a non-UTF application that permits users to supply
|
|
arbitrary patterns for compilation, you should be aware of a feature that
|
|
allows users to turn on UTF support from within a pattern, provided that PCRE
|
|
was built with UTF support. For example, an 8-bit pattern that begins with
|
|
"(*UTF8)" or "(*UTF)" turns on UTF-8 mode, which interprets patterns and
|
|
subjects as strings of UTF-8 characters instead of individual 8-bit characters.
|
|
This causes both the pattern and any data against which it is matched to be
|
|
checked for UTF-8 validity. If the data string is very long, such a check might
|
|
use sufficiently many resources as to cause your application to lose
|
|
performance.
|
|
<P>
|
|
|
|
One way of guarding against this possibility is to use the
|
|
<B>pcre_fullinfo()</B> function to check the compiled pattern's options for UTF.
|
|
Alternatively, from release 8.33, you can set the PCRE_NEVER_UTF option at
|
|
compile time. This causes an compile time error if a pattern contains a
|
|
UTF-setting sequence.
|
|
<P>
|
|
|
|
If your application is one that supports UTF, be aware that validity checking
|
|
can take time. If the same data string is to be matched many times, you can use
|
|
the PCRE_NO_UTF[8|16|32]_CHECK option for the second and subsequent matches to
|
|
save redundant checks.
|
|
<P>
|
|
|
|
Another way that performance can be hit is by running a pattern that has a very
|
|
large search tree against a string that will never match. Nested unlimited
|
|
repeats in a pattern are a common example. PCRE provides some protection
|
|
against this: see the PCRE_EXTRA_MATCH_LIMIT feature in the
|
|
|
|
<B>pcreapi</B>
|
|
|
|
page.
|
|
<A NAME="lbAF"> </A>
|
|
<H2>USER DOCUMENTATION</H2>
|
|
|
|
|
|
<P>
|
|
The user documentation for PCRE comprises a number of different sections. In
|
|
the "man" format, each of these is a separate "man page". In the HTML format,
|
|
each is a separate page, linked from the index page. In the plain text format,
|
|
the descriptions of the <B>pcregrep</B> and <B>pcretest</B> programs are in files
|
|
called <B>pcregrep.txt</B> and <B>pcretest.txt</B>, respectively. The remaining
|
|
sections, except for the <B>pcredemo</B> section (which is a program listing),
|
|
are concatenated in <B>pcre.txt</B>, for ease of searching. The sections are as
|
|
follows:
|
|
<P>
|
|
<BR> pcre this document
|
|
<BR> pcre-config show PCRE installation configuration information
|
|
<BR> pcre16 details of the 16-bit library
|
|
<BR> pcre32 details of the 32-bit library
|
|
<BR> pcreapi details of PCRE's native C API
|
|
<BR> pcrebuild building PCRE
|
|
<BR> pcrecallout details of the callout feature
|
|
<BR> pcrecompat discussion of Perl compatibility
|
|
<BR> pcrecpp details of the C++ wrapper for the 8-bit library
|
|
<BR> pcredemo a demonstration C program that uses PCRE
|
|
<BR> pcregrep description of the <B>pcregrep</B> command (8-bit only)
|
|
<BR> pcrejit discussion of the just-in-time optimization support
|
|
<BR> pcrelimits details of size and other limits
|
|
<BR> pcrematching discussion of the two matching algorithms
|
|
<BR> pcrepartial details of the partial matching facility
|
|
|
|
<BR> pcrepattern syntax and semantics of supported
|
|
<BR> regular expressions
|
|
<BR> pcreperform discussion of performance issues
|
|
<BR> pcreposix the POSIX-compatible C API for the 8-bit library
|
|
<BR> pcreprecompile details of saving and re-using precompiled patterns
|
|
<BR> pcresample discussion of the pcredemo program
|
|
<BR> pcrestack discussion of stack usage
|
|
<BR> pcresyntax quick syntax reference
|
|
<BR> pcretest description of the <B>pcretest</B> testing command
|
|
<BR> pcreunicode discussion of Unicode and UTF-8/16/32 support
|
|
<P>
|
|
In the "man" and HTML formats, there is also a short page for each C library
|
|
function, listing its arguments and results.
|
|
<A NAME="lbAG"> </A>
|
|
<H2>AUTHOR</H2>
|
|
|
|
|
|
<P>
|
|
<PRE>
|
|
Philip Hazel
|
|
University Computing Service
|
|
Cambridge CB2 3QH, England.
|
|
</PRE>
|
|
|
|
<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 two initials, followed by the
|
|
two digits 10, at the domain cam.ac.uk.
|
|
<A NAME="lbAH"> </A>
|
|
<H2>REVISION</H2>
|
|
|
|
|
|
<P>
|
|
<PRE>
|
|
Last updated: 10 February 2015
|
|
Copyright (c) 1997-2015 University of Cambridge.
|
|
</PRE>
|
|
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="1"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="2"><A HREF="#lbAC">PLEASE TAKE NOTE</A><DD>
|
|
<DT id="3"><A HREF="#lbAD">INTRODUCTION</A><DD>
|
|
<DT id="4"><A HREF="#lbAE">SECURITY CONSIDERATIONS</A><DD>
|
|
<DT id="5"><A HREF="#lbAF">USER DOCUMENTATION</A><DD>
|
|
<DT id="6"><A HREF="#lbAG">AUTHOR</A><DD>
|
|
<DT id="7"><A HREF="#lbAH">REVISION</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:51 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|