---
name: "pcre2_compile"
section: "3"
platform: "linux"
package: "pcre2"
version: "10.49-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pcre2_compile"
---

# pcre2\_compile(3)

Perl-compatible regular expressions (revised API)

## NAME

PCRE2 - Perl-compatible regular expressions (revised API)

## SYNOPSIS

**#include \<pcre2.h\>**

```
pcre2_code *pcre2_compile(PCRE2_SPTR pattern, PCRE2_SIZE length,
  uint32_t options, int *errorcode, PCRE2_SIZE *erroroffset,
  pcre2_compile_context *ccontext);
```

## DESCRIPTION

This function compiles a regular expression pattern into an internal form. Its arguments are:

  *pattern*       A string containing expression to be compiled\
   *length*        The length of the string or PCRE2\_ZERO\_TERMINATED\
   *options*       Primary option bits\
   *errorcode*     Where to put an error code\
   *erroffset*     Where to put an error offset\
   *ccontext*      Pointer to a compile context or NULL

The length of the pattern and any error offset that is returned are in code units, not characters. A NULL pattern with zero length is treated as an empty string. A compile context is needed only if you want to provide custom memory allocation functions, or to provide an external function for system stack size checking (see **pcre2\_set\_compile\_recursion\_guard()**), or to change one or more of these parameters:

  What \\R matches (Unicode newlines, or CR, LF, CRLF only);\
   PCRE2's character tables;\
   The newline character sequence;\
   The compile time nested parentheses limit;\
   The maximum pattern length (in code units) that is allowed;\
   The additional options bits.

The primary option bits are:

  PCRE2\_ANCHORED           Force pattern anchoring\
   PCRE2\_ALLOW\_EMPTY\_CLASS  Allow empty classes\
   PCRE2\_ALT\_BSUX           Alternative handling of \\u, \\U, and \\x\
   PCRE2\_ALT\_CIRCUMFLEX     Alternative handling of ^ in multiline mode\
   PCRE2\_ALT\_EXTENDED\_CLASS Alternative extended character class syntax\
   PCRE2\_ALT\_VERBNAMES      Process backslashes in verb names\
   PCRE2\_AUTO\_CALLOUT       Compile automatic callouts\
   PCRE2\_CASELESS           Do caseless matching\
   PCRE2\_DOLLAR\_ENDONLY     $ not to match newline at end\
   PCRE2\_DOTALL             . matches anything including NL\
   PCRE2\_DUPNAMES           Allow duplicate names for subpatterns\
   PCRE2\_ENDANCHORED        Pattern can match only at end of subject\
   PCRE2\_EXTENDED           Ignore white space and # comments\
   PCRE2\_FIRSTLINE          Force matching to be before newline\
   PCRE2\_LITERAL            Pattern characters are all literal\
   PCRE2\_MATCH\_INVALID\_UTF  Enable support for matching invalid UTF\
   PCRE2\_MATCH\_UNSET\_BACKREF  Match unset backreferences\
   PCRE2\_MULTILINE          ^ and $ match newlines within data\
   PCRE2\_NEVER\_BACKSLASH\_C  Lock out the use of \\C in patterns\
   PCRE2\_NEVER\_UCP          Lock out PCRE2\_UCP, e.g. via (\*UCP)\
   PCRE2\_NEVER\_UTF          Lock out PCRE2\_UTF, e.g. via (\*UTF)\
   PCRE2\_NO\_AUTO\_CAPTURE    Disable numbered capturing paren-\
                             theses (named ones available)\
   PCRE2\_NO\_AUTO\_POSSESS    Disable auto-possessification\
   PCRE2\_NO\_DOTSTAR\_ANCHOR  Disable automatic anchoring for .\*\
   PCRE2\_NO\_START\_OPTIMIZE  Disable match-time start optimizations\
   PCRE2\_NO\_UTF\_CHECK       Do not check the pattern for UTF validity\
                              (only relevant if PCRE2\_UTF is set)\
   PCRE2\_UCP                Use Unicode properties for \\d, \\w, etc.\
   PCRE2\_UNGREEDY           Invert greediness of quantifiers\
   PCRE2\_USE\_OFFSET\_LIMIT   Enable offset limit for unanchored matching\
   PCRE2\_UTF                Treat pattern and subjects as UTF strings

PCRE2 must be built with Unicode support (the default) in order to use PCRE2\_UTF, PCRE2\_UCP and related options.

Additional options may be set in the compile context via the **pcre2\_set\_compile\_extra\_options** function.

If either of *errorcode* or *erroroffset* is NULL, the function returns NULL immediately. Otherwise, the yield of this function is a pointer to a private data structure that contains the compiled pattern, or NULL if an error was detected. In the error case, a text error message can be obtained by passing the value returned via the *errorcode* argument to the **pcre2\_get\_error\_message()** function. The offset (in code units) where the error was encountered is returned via the *erroroffset* argument.

If there is no error, the value passed via *errorcode* returns the message "no error" if passed to **pcre2\_get\_error\_message()**, and the value passed via *erroroffset* is zero.

There is a complete description of the PCRE2 native API, with more detail on each option, in the **pcre2api** page, and a description of the POSIX API in the **pcre2posix** page.
