.TH PCRE2_MATCH 3 "21 October 2014" "PCRE2 10.00"
.SH NAME
PCRE2 - Perl-compatible regular expressions (revised API)
.SH SYNOPSIS
.rs
.sp
.B #include <pcre2.h>
.PP
.nf
.B int pcre2_match(const pcre2_code *\fIcode\fP, PCRE2_SPTR \fIsubject\fP,
.B "  PCRE2_SIZE \fIlength\fP, PCRE2_SIZE \fIstartoffset\fP,"
.B "  uint32_t \fIoptions\fP, pcre2_match_data *\fImatch_data\fP,"
.B "  pcre2_match_context *\fImcontext\fP);"
.fi
.
.SH DESCRIPTION
.rs
.sp
This function matches a compiled regular expression against a given subject
string, using a matching algorithm that is similar to Perl's. It returns
offsets to captured substrings. Its arguments are:
.sp
  \fIcode\fP         Points to the compiled pattern
  \fIsubject\fP      Points to the subject string
  \fIlength\fP       Length of the subject string
  \fIstartoffset\fP  Offset in the subject at which to start matching
  \fIoptions\fP      Option bits
  \fImatch_data\fP   Points to a match data block, for results
  \fImcontext\fP     Points to a match context, or is NULL
.sp
A match context is needed only if you want to:
.sp
  Set up a callout function
  Change the limit for calling the internal function \fImatch()\fP
  Change the limit for calling \fImatch()\fP recursively
  Set custom memory management when the heap is used for recursion
.sp
The \fIlength\fP and \fIstartoffset\fP values are code
units, not characters. The options are:
.sp
  PCRE2_ANCHORED          Match only at the first position
  PCRE2_NOTBOL            Subject string is not the beginning of a line
  PCRE2_NOTEOL            Subject string is not the end of a line
  PCRE2_NOTEMPTY          An empty string is not a valid match
  PCRE2_NOTEMPTY_ATSTART  An empty string at the start of the subject
                           is not a valid match
  PCRE2_NO_UTF_CHECK      Do not check the subject for UTF
                           validity (only relevant if PCRE2_UTF
                           was set at compile time)
  PCRE2_PARTIAL_SOFT      Return PCRE2_ERROR_PARTIAL for a partial
                            match if no full matches are found
  PCRE2_PARTIAL_HARD      Return PCRE2_ERROR_PARTIAL for a partial match
                           if that is found before a full match
.sp
For details of partial matching, see the
.\" HREF
\fBpcre2partial\fP
.\"
page. 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.
