.TH PCRE2_PATTERN_INFO 3 "14 February 2019" "PCRE2 10.33"
.SH NAME
PCRE2 - Perl-compatible regular expressions (revised API)
.SH SYNOPSIS
.rs
.sp
.B #include <pcre2.h>
.PP
.nf
.B int pcre2_pattern_info(const pcre2_code *\fIcode\fP, uint32_t \fIwhat\fP,
.B "   void *\fIwhere\fP);"
.fi
.
.SH DESCRIPTION
.rs
.sp
This function returns information about a compiled pattern. Its arguments are:
.sp
  \fIcode\fP     Pointer to a compiled regular expression pattern
  \fIwhat\fP     What information is required
  \fIwhere\fP    Where to put the information
.sp
The recognized values for the \fIwhat\fP argument, and the information they
request are as follows:
.sp
  PCRE2_INFO_ALLOPTIONS      Final options after compiling
  PCRE2_INFO_ARGOPTIONS      Options passed to \fBpcre2_compile()\fP
  PCRE2_INFO_BACKREFMAX      Number of highest backreference
  PCRE2_INFO_BSR             What \eR matches:
                               PCRE2_BSR_UNICODE: Unicode line endings
                               PCRE2_BSR_ANYCRLF: CR, LF, or CRLF only
  PCRE2_INFO_CAPTURECOUNT    Number of capturing subpatterns
.\" JOIN
  PCRE2_INFO_DEPTHLIMIT      Backtracking depth limit if set,
                               otherwise PCRE2_ERROR_UNSET
  PCRE2_INFO_EXTRAOPTIONS    Extra options that were passed in the
                               compile context
  PCRE2_INFO_FIRSTBITMAP     Bitmap of first code units, or NULL
  PCRE2_INFO_FIRSTCODETYPE   Type of start-of-match information
                               0 nothing set
                               1 first code unit is set
                               2 start of string or after newline
  PCRE2_INFO_FIRSTCODEUNIT   First code unit when type is 1
  PCRE2_INFO_FRAMESIZE       Size of backtracking frame
  PCRE2_INFO_HASBACKSLASHC   Return 1 if pattern contains \eC
.\" JOIN
  PCRE2_INFO_HASCRORLF       Return 1 if explicit CR or LF matches
                               exist in the pattern
.\" JOIN
  PCRE2_INFO_HEAPLIMIT       Heap memory limit if set,
                               otherwise PCRE2_ERROR_UNSET
  PCRE2_INFO_JCHANGED        Return 1 if (?J) or (?-J) was used
  PCRE2_INFO_JITSIZE         Size of JIT compiled code, or 0
  PCRE2_INFO_LASTCODETYPE    Type of must-be-present information
                               0 nothing set
                               1 code unit is set
  PCRE2_INFO_LASTCODEUNIT    Last code unit when type is 1
.\" JOIN
  PCRE2_INFO_MATCHEMPTY      1 if the pattern can match an
                               empty string, 0 otherwise
.\" JOIN
  PCRE2_INFO_MATCHLIMIT      Match limit if set,
                               otherwise PCRE2_ERROR_UNSET
.\" JOIN
  PCRE2_INFO_MAXLOOKBEHIND   Length (in characters) of the longest
                               lookbehind assertion
  PCRE2_INFO_MINLENGTH       Lower bound length of matching strings
  PCRE2_INFO_NAMECOUNT       Number of named subpatterns
  PCRE2_INFO_NAMEENTRYSIZE   Size of name table entries
  PCRE2_INFO_NAMETABLE       Pointer to name table
  PCRE2_CONFIG_NEWLINE       Code for the newline sequence:
                               PCRE2_NEWLINE_CR
                               PCRE2_NEWLINE_LF
                               PCRE2_NEWLINE_CRLF
                               PCRE2_NEWLINE_ANY
                               PCRE2_NEWLINE_ANYCRLF
                               PCRE2_NEWLINE_NUL
  PCRE2_INFO_RECURSIONLIMIT  Obsolete synonym for PCRE2_INFO_DEPTHLIMIT
  PCRE2_INFO_SIZE            Size of compiled pattern
.sp
If \fIwhere\fP is NULL, the function returns the amount of memory needed for
the requested information, in bytes. Otherwise, the \fIwhere\fP argument must
point to an unsigned 32-bit integer (uint32_t variable), except for the
following \fIwhat\fP values, when it must point to a variable of the type
shown:
.sp
  PCRE2_INFO_FIRSTBITMAP     const uint8_t *
  PCRE2_INFO_JITSIZE         size_t
  PCRE2_INFO_NAMETABLE       PCRE2_SPTR
  PCRE2_INFO_SIZE            size_t
.sp
The yield of the function is zero on success or:
.sp
  PCRE2_ERROR_NULL           the argument \fIcode\fP is NULL
  PCRE2_ERROR_BADMAGIC       the "magic number" was not found
  PCRE2_ERROR_BADOPTION      the value of \fIwhat\fP is invalid
  PCRE2_ERROR_BADMODE        the pattern was compiled in the wrong mode
  PCRE2_ERROR_UNSET          the requested information is not set
.P
There is a complete description of the PCRE2 native API in the
.\" HREF
\fBpcre2api\fP
.\"
page and a description of the POSIX API in the
.\" HREF
\fBpcre2posix\fP
.\"
page.
