PCRE2\_COMPILE(3) Library Functions Manual PCRE2\_COMPILE(3)

# [NAME](#NAME)

PCRE2 - Perl-compatible regular expressions (revised API)

# [SYNOPSIS](#SYNOPSIS)

**#include &lt;pcre2.h&gt;**

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

# [DESCRIPTION](#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.

30 October 2024 PCRE2 10.49

---

Document: pcre2_compile(3) from pcre2 10.49-r2 (Chainguard OS)
Source: https://github.com/PCRE2Project/pcre2.git
