<html>
<head>
<title>pcre2_substitute specification</title>
</head>
<body bgcolor="#FFFFFF" text="#00005A" link="#0066FF" alink="#3399FF" vlink="#2222BB">
<h1>pcre2_substitute man page</h1>
<p>
Return to the <a href="index.html">PCRE2 index page</a>.
</p>
<p>
This page is part of the PCRE2 HTML documentation. It was generated
automatically from the original man page. If there is any nonsense in it,
please consult the man page, in case the conversion went wrong.
<br>
<br><b>
SYNOPSIS
</b><br>
<P>
<b>#include &#60;pcre2.h&#62;</b>
</P>
<P>
<b>int pcre2_substitute(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>
<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>
<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>
<b>  pcre2_match_context *<i>mcontext</i>, PCRE2_SPTR <i>replacement</i>,</b>
<b>  PCRE2_SIZE <i>rlength</i>, PCRE2_UCHAR *<i>outputbuffer</i>,</b>
<b>  PCRE2_SIZE *<i>outlengthptr</i>);</b>
</P>
<br><b>
DESCRIPTION
</b><br>
<P>
This function matches a compiled regular expression against a given subject
string, using a matching algorithm that is similar to Perl's. It then makes a
copy of the subject, substituting a replacement string for what was matched.
Its arguments are:
<pre>
  <i>code</i>          Points to the compiled pattern
  <i>subject</i>       Points to the subject string
  <i>length</i>        Length of the subject string
  <i>startoffset</i>   Offset in the subject at which to start matching
  <i>options</i>       Option bits
  <i>match_data</i>    Points to a match data block, or is NULL
  <i>mcontext</i>      Points to a match context, or is NULL
  <i>replacement</i>   Points to the replacement string
  <i>rlength</i>       Length of the replacement string
  <i>outputbuffer</i>  Points to the output buffer
  <i>outlengthptr</i>  Points to the length of the output buffer
</pre>
A match context is needed only if you want to:
<pre>
  Set up a callout function
  Change the limit for calling the internal function <i>match()</i>
  Change the limit for calling <i>match()</i> recursively
  Set custom memory management when the heap is used for recursion
</pre>
The <i>length</i>, <i>startoffset</i> and <i>rlength</i> values are code
units, not characters, as is the contents of the variable pointed at by
<i>outlengthptr</i>, which is updated to the actual length of the new string.
The options are:
<pre>
  PCRE2_ANCHORED             Match only at the first position
  PCRE2_NOTBOL               Subject is not the beginning of a line
  PCRE2_NOTEOL               Subject 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 or replacement
                              for UTF validity (only relevant if
                              PCRE2_UTF was set at compile time)
  PCRE2_SUBSTITUTE_EXTENDED  Do extended replacement processing
  PCRE2_SUBSTITUTE_GLOBAL    Replace all occurrences in the subject
  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  If overflow, compute needed length
  PCRE2_SUBSTITUTE_UNKNOWN_UNSET  Treat unknown group as unset
  PCRE2_SUBSTITUTE_UNSET_EMPTY  Simple unset insert = empty string
</pre>
The function returns the number of substitutions, which may be zero if there
were no matches. The result can be greater than one only when
PCRE2_SUBSTITUTE_GLOBAL is set. In the event of an error, a negative error code
is returned.
</P>
<P>
There is a complete description of the PCRE2 native API in the
<a href="pcre2api.html"><b>pcre2api</b></a>
page and a description of the POSIX API in the
<a href="pcre2posix.html"><b>pcre2posix</b></a>
page.
<p>
Return to the <a href="index.html">PCRE2 index page</a>.
</p>
