xref: /netbsd-src/external/bsd/tre/dist/doc/tre-api.html (revision 3d3c5d42cb3aa0851ce2ca1303fdf134c850987c)
163d4abf0Sagc<h1>TRE API reference manual</h1>
263d4abf0Sagc
363d4abf0Sagc<h2>The <tt>regcomp()</tt> functions</h2>
463d4abf0Sagc<a name="regcomp"></a>
563d4abf0Sagc
663d4abf0Sagc<div class="code">
763d4abf0Sagc<code>
863d4abf0Sagc#include &lt;tre/regex.h&gt;
963d4abf0Sagc<br>
1063d4abf0Sagc<br>
1163d4abf0Sagc<font class="type">int</font>
1263d4abf0Sagc<font class="func">regcomp</font>(<font
1363d4abf0Sagcclass="type">regex_t</font> *<font class="arg">preg</font>,
1463d4abf0Sagc<font class="qual">const</font> <font class="type">char</font>
1563d4abf0Sagc*<font class="arg">regex</font>, <font class="type">int</font>
1663d4abf0Sagc<font class="arg">cflags</font>);
1763d4abf0Sagc<br>
1863d4abf0Sagc<font class="type">int</font> <font
1963d4abf0Sagcclass="func">regncomp</font>(<font class="type">regex_t</font>
2063d4abf0Sagc*<font class="arg">preg</font>, <font class="qual">const</font>
2163d4abf0Sagc<font class="type">char</font> *<font class="arg">regex</font>,
2263d4abf0Sagc<font class="type">size_t</font> <font class="arg">len</font>,
2363d4abf0Sagc<font class="type">int</font> <font class="arg">cflags</font>);
2463d4abf0Sagc<br>
2563d4abf0Sagc<font class="type">int</font> <font
2663d4abf0Sagcclass="func">regwcomp</font>(<font class="type">regex_t</font>
2763d4abf0Sagc*<font class="arg">preg</font>, <font class="qual">const</font>
2863d4abf0Sagc<font class="type">wchar_t</font> *<font
2963d4abf0Sagcclass="arg">regex</font>, <font class="type">int</font> <font
3063d4abf0Sagcclass="arg">cflags</font>);
3163d4abf0Sagc<br>
3263d4abf0Sagc<font class="type">int</font> <font
3363d4abf0Sagcclass="func">regwncomp</font>(<font class="type">regex_t</font>
3463d4abf0Sagc*<font class="arg">preg</font>, <font class="qual">const</font>
3563d4abf0Sagc<font class="type">wchar_t</font> *<font
3663d4abf0Sagcclass="arg">regex</font>, <font class="type">size_t</font>
3763d4abf0Sagc<font class="arg">len</font>, <font class="type">int</font>
3863d4abf0Sagc<font class="arg">cflags</font>);
3963d4abf0Sagc<br>
4063d4abf0Sagc<font class="type">void</font> <font
4163d4abf0Sagcclass="func">regfree</font>(<font class="type">regex_t</font>
4263d4abf0Sagc*<font class="arg">preg</font>);
4363d4abf0Sagc<br>
4463d4abf0Sagc</code>
4563d4abf0Sagc</div>
4663d4abf0Sagc
4763d4abf0Sagc<p>
4863d4abf0SagcThe <tt><font class="func">regcomp</font>()</tt> function compiles
4963d4abf0Sagcthe regex string pointed to by <tt><font
5063d4abf0Sagcclass="arg">regex</font></tt> to an internal representation and
5163d4abf0Sagcstores the result in the pattern buffer structure pointed to by
5263d4abf0Sagc<tt><font class="arg">preg</font></tt>.  The <tt><font
5363d4abf0Sagcclass="func">regncomp</font>()</tt> function is like <tt><font
5463d4abf0Sagcclass="func">regcomp</font>()</tt>, but <tt><font
5563d4abf0Sagcclass="arg">regex</font></tt> is not terminated with the null
5663d4abf0Sagcbyte.  Instead, the <tt><font class="arg">len</font></tt> argument
5763d4abf0Sagcis used to give the length of the string, and the string may contain
5863d4abf0Sagcnull bytes.  The <tt><font class="func">regwcomp</font>()</tt> and
5963d4abf0Sagc<tt><font class="func">regwncomp</font>()</tt> functions work like
6063d4abf0Sagc<tt><font class="func">regcomp</font>()</tt> and <tt><font
61*3d3c5d42Swizclass="func">regncomp</font>()</tt>, respectively, but take a
62*3d3c5d42Swizwide-character (<tt><font class="type">wchar_t</font></tt>) string
6363d4abf0Sagcinstead of a byte string.
6463d4abf0Sagc</p>
6563d4abf0Sagc
6663d4abf0Sagc<p>
6763d4abf0SagcThe <tt><font class="arg">cflags</font></tt> argument is a the
6863d4abf0Sagcbitwise inclusive OR of zero or more of the following flags (defined
6963d4abf0Sagcin the header <tt>&lt;tre/regex.h&gt;</tt>):
7063d4abf0Sagc</p>
7163d4abf0Sagc
7263d4abf0Sagc<blockquote>
7363d4abf0Sagc<dl>
7463d4abf0Sagc<dt><tt>REG_EXTENDED</tt></dt>
7563d4abf0Sagc<dd>Use POSIX Extended Regular Expression (ERE) compatible syntax when
7663d4abf0Sagccompiling <tt><font class="arg">regex</font></tt>.  The default
7763d4abf0Sagcsyntax is the POSIX Basic Regular Expression (BRE) syntax, but it is
7863d4abf0Sagcconsidered obsolete.</dd>
7963d4abf0Sagc
8063d4abf0Sagc<dt><tt>REG_ICASE</tt></dt>
8163d4abf0Sagc<dd>Ignore case.  Subsequent searches with the <a
8263d4abf0Sagchref="#regexec"><tt>regexec</tt></a> family of functions using this
8363d4abf0Sagcpattern buffer will be case insensitive.</dd>
8463d4abf0Sagc
8563d4abf0Sagc<dt><tt>REG_NOSUB</tt></dt>
8663d4abf0Sagc<dd>Do not report submatches.  Subsequent searches with the <a
8763d4abf0Sagchref="#regexec"><tt>regexec</tt></a> family of functions will only
8863d4abf0Sagcreport whether a match was found or not and will not fill the submatch
8963d4abf0Sagcarray.</dd>
9063d4abf0Sagc
9163d4abf0Sagc<dt><tt>REG_NEWLINE</tt></dt>
9263d4abf0Sagc<dd>Normally the newline character is treated as an ordinary
9363d4abf0Sagccharacter.  When this flag is used, the newline character
9463d4abf0Sagc(<tt>'\n'</tt>, ASCII code 10) is treated specially as follows:
9563d4abf0Sagc<ol>
9663d4abf0Sagc<li>The match-any-character operator (dot <tt>"."</tt> outside a
9763d4abf0Sagcbracket expression) does not match a newline.</li>
9863d4abf0Sagc<li>A non-matching list (<tt>[^...]</tt>) not containing a newline
9963d4abf0Sagcdoes not match a newline.</li>
10063d4abf0Sagc<li>The match-beginning-of-line operator <tt>^</tt> matches the empty
10163d4abf0Sagcstring immediately after a newline as well as the empty string at the
10263d4abf0Sagcbeginning of the string (but see the <code>REG_NOTBOL</code>
10363d4abf0Sagc<code>regexec()</code> flag below).
10463d4abf0Sagc<li>The match-end-of-line operator <tt>$</tt> matches the empty
10563d4abf0Sagcstring immediately before a newline as well as the empty string at the
10663d4abf0Sagcend of the string (but see the <code>REG_NOTEOL</code>
10763d4abf0Sagc<code>regexec()</code> flag below).
10863d4abf0Sagc</ol>
10963d4abf0Sagc</dd>
11063d4abf0Sagc
11163d4abf0Sagc<dt><tt>REG_LITERAL</tt></dt>
11263d4abf0Sagc<dd>Interpret the entire <tt><font class="arg">regex</font></tt>
11363d4abf0Sagcargument as a literal string, that is, all characters will be
11463d4abf0Sagcconsidered ordinary.  This is a nonstandard extension, compatible with
11563d4abf0Sagcbut not specified by POSIX.</dd>
11663d4abf0Sagc
11763d4abf0Sagc<dt><tt>REG_NOSPEC</tt></dt>
11863d4abf0Sagc<dd>Same as <tt>REG_LITERAL</tt>.  This flag is provided for
11963d4abf0Sagccompatibility with BSD.</dd>
12063d4abf0Sagc
12163d4abf0Sagc<dt><tt>REG_RIGHT_ASSOC</tt></dt>
12263d4abf0Sagc<dd>By default, concatenation is left associative in TRE, as per
12363d4abf0Sagcthe grammar given in the <a
12463d4abf0Sagchref="http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap09.html">base
12563d4abf0Sagcspecifications on regular expressions</a> of Std 1003.1-2001 (POSIX).
12663d4abf0SagcThis flag flips associativity of concatenation to right associative.
12763d4abf0SagcAssociativity can have an effect on how a match is divided into
12863d4abf0Sagcsubmatches, but does not change what is matched by the entire regexp.
12963d4abf0Sagc</dd>
13063d4abf0Sagc
13163d4abf0Sagc<dt><tt>REG_UNGREEDY</tt></dt>
13263d4abf0Sagc<dd>By default, repetition operators are greedy in TRE as per Std 1003.1-2001 (POSIX) and
13363d4abf0Sagccan be forced to be non-greedy by appending a <tt>?</tt> character. This flag reverses this behavior
13463d4abf0Sagcby making the operators non-greedy by default and greedy when a <tt>?</tt> is specified.</dd>
13563d4abf0Sagc</dl>
13663d4abf0Sagc</blockquote>
13763d4abf0Sagc
13863d4abf0Sagc<p>
13963d4abf0SagcAfter a successful call to <tt><font class="func">regcomp</font></tt> it is
14063d4abf0Sagcpossible to use the <tt><font class="arg">preg</font></tt> pattern buffer for
14163d4abf0Sagcsearching for matches in strings (see below).  Once the pattern buffer is no
14263d4abf0Sagclonger needed, it should be freed with <tt><font
14363d4abf0Sagcclass="func">regfree</font></tt> to free the memory allocated for it.
14463d4abf0Sagc</p>
14563d4abf0Sagc
14663d4abf0Sagc
14763d4abf0Sagc<p>
14863d4abf0SagcThe <tt><font class="type">regex_t</font></tt> structure has the
14963d4abf0Sagcfollowing fields that the application can read:
15063d4abf0Sagc</p>
15163d4abf0Sagc<blockquote>
15263d4abf0Sagc<dl>
15363d4abf0Sagc<dt><tt><font class="type">size_t</font> <font
15463d4abf0Sagcclass="arg">re_nsub</font></tt></dt>
15563d4abf0Sagc<dd>Number of parenthesized subexpressions in <tt><font
15663d4abf0Sagcclass="arg">regex</font></tt>.
15763d4abf0Sagc</dd>
15863d4abf0Sagc</dl>
15963d4abf0Sagc</blockquote>
16063d4abf0Sagc
16163d4abf0Sagc<p>
16263d4abf0SagcThe <tt><font class="func">regcomp</font></tt> function returns
16363d4abf0Sagczero if the compilation was successful, or one of the following error
16463d4abf0Sagccodes if there was an error:
16563d4abf0Sagc</p>
16663d4abf0Sagc<blockquote>
16763d4abf0Sagc<dl>
16863d4abf0Sagc<dt><tt>REG_BADPAT</tt></dt>
16963d4abf0Sagc<dd>Invalid regexp.  TRE returns this only if a multibyte character
17063d4abf0Sagcset is used in the current locale, and <tt><font
17163d4abf0Sagcclass="arg">regex</font></tt> contained an invalid multibyte
17263d4abf0Sagcsequence.</dd>
17363d4abf0Sagc<dt><tt>REG_ECOLLATE</tt></dt>
17463d4abf0Sagc<dd>Invalid collating element referenced.  TRE returns this whenever
17563d4abf0Sagcequivalence classes or multicharacter collating elements are used in
17663d4abf0Sagcbracket expressions (they are not supported yet).</dd>
17763d4abf0Sagc<dt><tt>REG_ECTYPE</tt></dt>
17863d4abf0Sagc<dd>Unknown character class name in <tt>[[:<i>name</i>:]]</tt>.</dd>
17963d4abf0Sagc<dt><tt>REG_EESCAPE</tt></dt>
18063d4abf0Sagc<dd>The last character of <tt><font class="arg">regex</font></tt>
18163d4abf0Sagcwas a backslash (<tt>\</tt>).</dd>
18263d4abf0Sagc<dt><tt>REG_ESUBREG</tt></dt>
18363d4abf0Sagc<dd>Invalid back reference; number in <tt>\<i>digit</i></tt>
18463d4abf0Sagcinvalid.</dd>
18563d4abf0Sagc<dt><tt>REG_EBRACK</tt></dt>
18663d4abf0Sagc<dd><tt>[]</tt> imbalance.</dd>
18763d4abf0Sagc<dt><tt>REG_EPAREN</tt></dt>
18863d4abf0Sagc<dd><tt>\(\)</tt> or <tt>()</tt> imbalance.</dd>
18963d4abf0Sagc<dt><tt>REG_EBRACE</tt></dt>
19063d4abf0Sagc<dd><tt>\{\}</tt> or <tt>{}</tt> imbalance.</dd>
19163d4abf0Sagc<dt><tt>REG_BADBR</tt></dt>
19263d4abf0Sagc<dd><tt>{}</tt> content invalid: not a number, more than two numbers,
19363d4abf0Sagcfirst larger than second, or number too large.
19463d4abf0Sagc<dt><tt>REG_ERANGE</tt></dt>
19563d4abf0Sagc<dd>Invalid character range, e.g. ending point is earlier in the
19663d4abf0Sagccollating order than the starting point.</dd>
19763d4abf0Sagc<dt><tt>REG_ESPACE</tt></dt>
19863d4abf0Sagc<dd>Out of memory, or an internal limit exceeded.</dd>
19963d4abf0Sagc<dt><tt>REG_BADRPT</tt></dt>
20063d4abf0Sagc<dd>Invalid use of repetition operators: two or more repetition operators have
20163d4abf0Sagcbeen chained in an undefined way.</dd>
20263d4abf0Sagc</dl>
20363d4abf0Sagc</blockquote>
20463d4abf0Sagc
20563d4abf0Sagc
20663d4abf0Sagc<h2>The <tt>regexec()</tt> functions</h2>
20763d4abf0Sagc<a name="regexec"></a>
20863d4abf0Sagc
20963d4abf0Sagc<div class="code">
21063d4abf0Sagc<code>
21163d4abf0Sagc#include &lt;tre/regex.h&gt;
21263d4abf0Sagc<br>
21363d4abf0Sagc<br>
21463d4abf0Sagc<font class="type">int</font> <font
21563d4abf0Sagcclass="func">regexec</font>(<font class="qual">const</font>
21663d4abf0Sagc<font class="type">regex_t</font> *<font
21763d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
21863d4abf0Sagcclass="type">char</font> *<font class="arg">string</font>,
21963d4abf0Sagc<font class="type">size_t</font> <font
22063d4abf0Sagcclass="arg">nmatch</font>,
22163d4abf0Sagc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
22263d4abf0Sagc<font class="type">regmatch_t</font> <font
22363d4abf0Sagcclass="arg">pmatch</font>[], <font class="type">int</font>
22463d4abf0Sagc<font class="arg">eflags</font>);
22563d4abf0Sagc<br>
22663d4abf0Sagc<font class="type">int</font> <font
22763d4abf0Sagcclass="func">regnexec</font>(<font class="qual">const</font>
22863d4abf0Sagc<font class="type">regex_t</font> *<font
22963d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
23063d4abf0Sagcclass="type">char</font> *<font class="arg">string</font>,
23163d4abf0Sagc<font class="type">size_t</font> <font class="arg">len</font>,
23263d4abf0Sagc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
23363d4abf0Sagc<font class="type">size_t</font> <font
23463d4abf0Sagcclass="arg">nmatch</font>, <font class="type">regmatch_t</font>
23563d4abf0Sagc<font class="arg">pmatch</font>[], <font
23663d4abf0Sagcclass="type">int</font> <font class="arg">eflags</font>);
23763d4abf0Sagc<br>
23863d4abf0Sagc<font class="type">int</font> <font
23963d4abf0Sagcclass="func">regwexec</font>(<font class="qual">const</font>
24063d4abf0Sagc<font class="type">regex_t</font> *<font
24163d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
24263d4abf0Sagcclass="type">wchar_t</font> *<font class="arg">string</font>,
24363d4abf0Sagc<font class="type">size_t</font> <font
24463d4abf0Sagcclass="arg">nmatch</font>,
24563d4abf0Sagc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
24663d4abf0Sagc<font class="type">regmatch_t</font> <font
24763d4abf0Sagcclass="arg">pmatch</font>[], <font class="type">int</font>
24863d4abf0Sagc<font class="arg">eflags</font>);
24963d4abf0Sagc<br>
25063d4abf0Sagc<font class="type">int</font> <font
25163d4abf0Sagcclass="func">regwnexec</font>(<font class="qual">const</font>
25263d4abf0Sagc<font class="type">regex_t</font> *<font
25363d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
25463d4abf0Sagcclass="type">wchar_t</font> *<font class="arg">string</font>,
25563d4abf0Sagc<font class="type">size_t</font> <font class="arg">len</font>,
25663d4abf0Sagc<br>
25763d4abf0Sagc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
25863d4abf0Sagc<font class="type">size_t</font> <font
25963d4abf0Sagcclass="arg">nmatch</font>, <font class="type">regmatch_t</font>
26063d4abf0Sagc<font class="arg">pmatch</font>[], <font
26163d4abf0Sagcclass="type">int</font> <font class="arg">eflags</font>);
26263d4abf0Sagc</code>
26363d4abf0Sagc</div>
26463d4abf0Sagc
26563d4abf0Sagc<p>
26663d4abf0SagcThe <tt><font class="func">regexec</font>()</tt> function matches
26763d4abf0Sagcthe null-terminated string against the compiled regexp <tt><font
26863d4abf0Sagcclass="arg">preg</font></tt>, initialized by a previous call to
26963d4abf0Sagcany one of the <a href="#regcomp"><tt>regcomp</tt></a> functions.  The
27063d4abf0Sagc<tt><font class="func">regnexec</font>()</tt> function is like
27163d4abf0Sagc<tt><font class="func">regexec</font>()</tt>, but <tt><font
27263d4abf0Sagcclass="arg">string</font></tt> is not terminated with a null byte.
27363d4abf0SagcInstead, the <tt><font class="arg">len</font></tt> argument is used
27463d4abf0Sagcto give the length of the string, and the string may contain null
27563d4abf0Sagcbytes.  The <tt><font class="func">regwexec</font>()</tt> and
27663d4abf0Sagc<tt><font class="func">regwnexec</font>()</tt> functions work like
27763d4abf0Sagc<tt><font class="func">regexec</font>()</tt> and <tt><font
27863d4abf0Sagcclass="func">regnexec</font>()</tt>, respectively, but take a wide
27963d4abf0Sagccharacter (<tt><font class="type">wchar_t</font></tt>) string
28063d4abf0Sagcinstead of a byte string. The <tt><font
28163d4abf0Sagcclass="arg">eflags</font></tt> argument is a bitwise OR of zero or
28263d4abf0Sagcmore of the following flags:
28363d4abf0Sagc</p>
28463d4abf0Sagc<blockquote>
28563d4abf0Sagc<dl>
28663d4abf0Sagc<dt><code>REG_NOTBOL</code></dt>
28763d4abf0Sagc<dd>
28863d4abf0Sagc<p>
28963d4abf0SagcWhen this flag is used, the match-beginning-of-line operator
29063d4abf0Sagc<tt>^</tt> does not match the empty string at the beginning of
29163d4abf0Sagc<tt><font class="arg">string</font></tt>.  If
29263d4abf0Sagc<code>REG_NEWLINE</code> was used when compiling
29363d4abf0Sagc<tt><font class="arg">preg</font></tt> the empty string
29463d4abf0Sagcimmediately after a newline character will still be matched.
29563d4abf0Sagc</p>
29663d4abf0Sagc</dd>
29763d4abf0Sagc
29863d4abf0Sagc<dt><code>REG_NOTEOL</code></dt>
29963d4abf0Sagc<dd>
30063d4abf0Sagc<p>
30163d4abf0SagcWhen this flag is used, the match-end-of-line operator
30263d4abf0Sagc<tt>$</tt> does not match the empty string at the end of
30363d4abf0Sagc<tt><font class="arg">string</font></tt>.  If
30463d4abf0Sagc<code>REG_NEWLINE</code> was used when compiling
30563d4abf0Sagc<tt><font class="arg">preg</font></tt> the empty string
30663d4abf0Sagcimmediately before a newline character will still be matched.
30763d4abf0Sagc</p>
30863d4abf0Sagc
30963d4abf0Sagc</dl>
31063d4abf0Sagc
31163d4abf0Sagc<p>
31263d4abf0SagcThese flags are useful when different portions of a string are passed
31363d4abf0Sagcto <code>regexec</code> and the beginning or end of the partial string
31463d4abf0Sagcshould not be interpreted as the beginning or end of a line.
31563d4abf0Sagc</p>
31663d4abf0Sagc
31763d4abf0Sagc</blockquote>
31863d4abf0Sagc
31963d4abf0Sagc<p>
32063d4abf0SagcIf <code>REG_NOSUB</code> was used when compiling <tt><font
32163d4abf0Sagcclass="arg">preg</font></tt>, <tt><font
32263d4abf0Sagcclass="arg">nmatch</font></tt> is zero, or <tt><font
32363d4abf0Sagcclass="arg">pmatch</font></tt> is <code>NULL</code>, then the
32463d4abf0Sagc<tt><font class="arg">pmatch</font></tt> argument is ignored.
32563d4abf0SagcOtherwise, the submatches corresponding to the parenthesized
32663d4abf0Sagcsubexpressions are filled in the elements of <tt><font
32763d4abf0Sagcclass="arg">pmatch</font></tt>, which must be dimensioned to have
32863d4abf0Sagcat least <tt><font class="arg">nmatch</font></tt> elements.
32963d4abf0Sagc</p>
33063d4abf0Sagc
33163d4abf0Sagc<p>
33263d4abf0SagcThe <tt><font class="type">regmatch_t</font></tt> structure contains
33363d4abf0Sagcat least the following fields:
33463d4abf0Sagc</p>
33563d4abf0Sagc<blockquote>
33663d4abf0Sagc<dl>
33763d4abf0Sagc<dt><tt><font class="type">regoff_t</font> <font
33863d4abf0Sagcclass="arg">rm_so</font></tt></dt>
33963d4abf0Sagc<dd>Offset from start of <tt><font class="arg">string</font></tt> to start of
34063d4abf0Sagcsubstring.  </dd>
34163d4abf0Sagc<dt><tt><font class="type">regoff_t</font> <font
34263d4abf0Sagcclass="arg">rm_eo</font></tt></dt>
34363d4abf0Sagc<dd>Offset from start of <tt><font class="arg">string</font></tt> to the first
34463d4abf0Sagccharacter after the substring.  </dd>
34563d4abf0Sagc</dl>
34663d4abf0Sagc</blockquote>
34763d4abf0Sagc
34863d4abf0Sagc<p>
34963d4abf0SagcThe length of a submatch can be computed by subtracting <code>rm_eo</code> and
35063d4abf0Sagc<code>rm_so</code>.  If a parenthesized subexpression did not participate in a
35163d4abf0Sagcmatch, the <code>rm_so</code> and <code>rm_eo</code> fields for the
35263d4abf0Sagccorresponding <code>pmatch</code> element are set to <code>-1</code>.  Note
35363d4abf0Sagcthat when a multibyte character set is in effect, the submatch offsets are
35463d4abf0Sagcgiven as byte offsets, not character offsets.
35563d4abf0Sagc</p>
35663d4abf0Sagc
35763d4abf0Sagc<p>
35863d4abf0SagcThe <code>regexec()</code> functions return zero if a match was found,
35963d4abf0Sagcotherwise they return <code>REG_NOMATCH</code> to indicate no match,
36063d4abf0Sagcor <code>REG_ESPACE</code> to indicate that enough temporary memory
36163d4abf0Sagccould not be allocated to complete the matching operation.
36263d4abf0Sagc</p>
36363d4abf0Sagc
36463d4abf0Sagc
36563d4abf0Sagc
36663d4abf0Sagc<h3>reguexec()</h3>
36763d4abf0Sagc
36863d4abf0Sagc<div class="code">
36963d4abf0Sagc<code>
37063d4abf0Sagc#include &lt;tre/regex.h&gt;
37163d4abf0Sagc<br>
37263d4abf0Sagc<br>
37363d4abf0Sagc<font class="qual">typedef struct</font> {
37463d4abf0Sagc<br>
37563d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font> (*get_next_char)(<font
37663d4abf0Sagcclass="type">tre_char_t</font> *<font class="arg">c</font>, <font
37763d4abf0Sagcclass="type">unsigned int</font> *<font class="arg">pos_add</font>,
37863d4abf0Sagc<font class="type">void</font> *<font class="arg">context</font>);
37963d4abf0Sagc<br>
38063d4abf0Sagc&nbsp;&nbsp;<font class="type">void</font> (*rewind)(<font
38163d4abf0Sagcclass="type">size_t</font> <font class="arg">pos</font>, <font
38263d4abf0Sagcclass="type">void</font> *<font class="arg">context</font>);
38363d4abf0Sagc<br>
38463d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font> (*compare)(<font
38563d4abf0Sagcclass="type">size_t</font> <font class="arg">pos1</font>, <font
38663d4abf0Sagcclass="type">size_t</font> <font class="arg">pos2</font>, <font
38763d4abf0Sagcclass="type">size_t</font> <font class="arg">len</font>, <font
38863d4abf0Sagcclass="type">void</font> *<font class="arg">context</font>);
38963d4abf0Sagc<br>
39063d4abf0Sagc&nbsp;&nbsp;<font class="type">void</font> *<font
39163d4abf0Sagcclass="arg">context</font>;
39263d4abf0Sagc<br>
39363d4abf0Sagc} <font class="type">tre_str_source</font>;
39463d4abf0Sagc<br>
39563d4abf0Sagc<br>
39663d4abf0Sagc<font class="type">int</font> <font
39763d4abf0Sagcclass="func">reguexec</font>(<font class="qual">const</font>
39863d4abf0Sagc<font class="type">regex_t</font> *<font
39963d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
40063d4abf0Sagcclass="type">tre_str_source</font> *<font class="arg">string</font>,
40163d4abf0Sagc<font class="type">size_t</font> <font class="arg">nmatch</font>,
40263d4abf0Sagc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
40363d4abf0Sagc<font class="type">regmatch_t</font> <font
40463d4abf0Sagcclass="arg">pmatch</font>[], <font class="type">int</font>
40563d4abf0Sagc<font class="arg">eflags</font>);
40663d4abf0Sagc</code>
40763d4abf0Sagc</div>
40863d4abf0Sagc
40963d4abf0Sagc<p>
41063d4abf0SagcThe <tt><font class="func">reguexec</font>()</tt> function works just
41163d4abf0Sagclike the other <tt>regexec()</tt> functions, except that the input
41263d4abf0Sagcstring is read from user specified callback functions instead of a
41363d4abf0Sagccharacter array.  This makes it possible, for example, to match
41463d4abf0Sagcregexps over arbitrary user specified data structures.
41563d4abf0Sagc</p>
41663d4abf0Sagc
41763d4abf0Sagc<p>
41863d4abf0SagcThe <tt><font class="type">tre_str_source</font></tt> structure
41963d4abf0Sagccontains the following fields:
42063d4abf0Sagc</p>
42163d4abf0Sagc<blockquote>
42263d4abf0Sagc<dl>
42363d4abf0Sagc<dt><tt>get_next_char</tt></dt>
42463d4abf0Sagc<dd>This function must retrieve the next available character.  If a
42563d4abf0Sagccharacter is not available, the space pointed to by
42663d4abf0Sagc<tt><font class="arg">c</font></tt> must be set to zero and it must return
42763d4abf0Sagca nonzero value.  If a character is available, it must be stored
42863d4abf0Sagcto the space pointed to by
42963d4abf0Sagc<tt><font class="arg">c</font></tt>, and the integer pointer to by
43063d4abf0Sagc<tt><font class="arg">pos_add</font></tt> must be set to the
43163d4abf0Sagcnumber of units advanced in the input (the value must be
43263d4abf0Sagc<tt>&gt;=1</tt>), and zero must be returned.</dd>
43363d4abf0Sagc
43463d4abf0Sagc<dt><tt>rewind</tt></dt>
43563d4abf0Sagc<dd>This function must rewind the input stream to the position
43663d4abf0Sagcspecified by <tt><font class="arg">pos</font></tt>.  Unless the regexp
43763d4abf0Sagcuses back references, <tt>rewind</tt> is not needed and can be set to
43863d4abf0Sagc<tt>NULL</tt>.</dd>
43963d4abf0Sagc
44063d4abf0Sagc<dt><tt>compare</tt></dt>
44163d4abf0Sagc<dd>This function compares two substrings in the input streams
44263d4abf0Sagcstarting at the positions specified by <tt><font
44363d4abf0Sagcclass="arg">pos1</font></tt> and <tt><font
44463d4abf0Sagcclass="arg">pos2</font></tt> of length <tt><font
44563d4abf0Sagcclass="arg">len</font></tt>.  If the substrings are equal,
44663d4abf0Sagc<tt>compare</tt> must return zero, otherwise a nonzero value must be
44763d4abf0Sagcreturned.  Unless the regexp uses back references, <tt>compare</tt> is
44863d4abf0Sagcnot needed and can be set to <tt>NULL</tt>.</dd>
44963d4abf0Sagc
45063d4abf0Sagc<dt><tt>context</tt></dt>
45163d4abf0Sagc<dd>This is a context variable, passed as the last argument to
45263d4abf0Sagcall of the above functions for keeping track of the internal state of
45363d4abf0Sagcthe users code.</dd>
45463d4abf0Sagc
45563d4abf0Sagc</dl>
45663d4abf0Sagc</blockquote>
45763d4abf0Sagc
45863d4abf0Sagc<p>
45963d4abf0SagcThe position in the input stream is measured in <tt><font
46063d4abf0Sagcclass="type">size_t</font></tt> units.  The current position is the
46163d4abf0Sagcsum of the increments gotten from <tt><font
46263d4abf0Sagcclass="arg">pos_add</font></tt> (plus the position of the last
46363d4abf0Sagc<tt>rewind</tt>, if any).  The starting position is zero.  Submatch
46463d4abf0Sagcpositions filled in the <tt><font class="arg">pmatch</font>[]</tt>
46563d4abf0Sagcarray are, of course, given using positions computed in this way.
46663d4abf0Sagc</p>
46763d4abf0Sagc
46863d4abf0Sagc<p>
46963d4abf0SagcFor an example of how to use <tt>reguexec()</tt>, see the
47063d4abf0Sagc<tt>tests/test-str-source.c</tt> file in the TRE source code
47163d4abf0Sagcdistribution.
47263d4abf0Sagc</p>
47363d4abf0Sagc
47463d4abf0Sagc<h2>The approximate matching functions</h2>
47563d4abf0Sagc<a name="regaexec"></a>
47663d4abf0Sagc
47763d4abf0Sagc<div class="code">
47863d4abf0Sagc<code>
47963d4abf0Sagc#include &lt;tre/regex.h&gt;
48063d4abf0Sagc<br>
48163d4abf0Sagc<br>
48263d4abf0Sagc<font class="qual">typedef struct</font> {<br>
48363d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
48463d4abf0Sagc<font class="arg">cost_ins</font>;<br>
48563d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
48663d4abf0Sagc<font class="arg">cost_del</font>;<br>
48763d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
48863d4abf0Sagc<font class="arg">cost_subst</font>;<br>
48963d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
49063d4abf0Sagc<font class="arg">max_cost</font>;<br><br>
49163d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
49263d4abf0Sagc<font class="arg">max_ins</font>;<br>
49363d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
49463d4abf0Sagc<font class="arg">max_del</font>;<br>
49563d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
49663d4abf0Sagc<font class="arg">max_subst</font>;<br>
49763d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
49863d4abf0Sagc<font class="arg">max_err</font>;<br>
49963d4abf0Sagc} <font class="type">regaparams_t</font>;<br>
50063d4abf0Sagc<br>
50163d4abf0Sagc<font class="qual">typedef struct</font> {<br>
50263d4abf0Sagc&nbsp;&nbsp;<font class="type">size_t</font>
50363d4abf0Sagc<font class="arg">nmatch</font>;<br>
50463d4abf0Sagc&nbsp;&nbsp;<font class="type">regmatch_t</font>
50563d4abf0Sagc*<font class="arg">pmatch</font>;<br>
50663d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
50763d4abf0Sagc<font class="arg">cost</font>;<br>
50863d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
50963d4abf0Sagc<font class="arg">num_ins</font>;<br>
51063d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
51163d4abf0Sagc<font class="arg">num_del</font>;<br>
51263d4abf0Sagc&nbsp;&nbsp;<font class="type">int</font>
51363d4abf0Sagc<font class="arg">num_subst</font>;<br>
51463d4abf0Sagc} <font class="type">regamatch_t</font>;<br>
51563d4abf0Sagc<br>
51663d4abf0Sagc<font class="type">int</font> <font
51763d4abf0Sagcclass="func">regaexec</font>(<font class="qual">const</font>
51863d4abf0Sagc<font class="type">regex_t</font> *<font
51963d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
52063d4abf0Sagcclass="type">char</font> *<font class="arg">string</font>,<br>
52163d4abf0Sagc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
52263d4abf0Sagc<font class="type">regamatch_t</font>
52363d4abf0Sagc*<font class="arg">match</font>,
52463d4abf0Sagc<font class="type">regaparams_t</font>
52563d4abf0Sagc<font class="arg">params</font>,
52663d4abf0Sagc<font class="type">int</font>
52763d4abf0Sagc<font class="arg">eflags</font>);
52863d4abf0Sagc<br>
52963d4abf0Sagc<font class="type">int</font> <font
53063d4abf0Sagcclass="func">reganexec</font>(<font class="qual">const</font>
53163d4abf0Sagc<font class="type">regex_t</font> *<font
53263d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
53363d4abf0Sagcclass="type">char</font> *<font class="arg">string</font>,
53463d4abf0Sagc<font class="type">size_t</font> <font class="arg">len</font>,<br>
53563d4abf0Sagc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
53663d4abf0Sagc<font class="type">regamatch_t</font>
53763d4abf0Sagc*<font class="arg">match</font>,
53863d4abf0Sagc<font class="type">regaparams_t</font>
53963d4abf0Sagc<font class="arg">params</font>,
54063d4abf0Sagc<font class="type">int</font> <font class="arg">eflags</font>);
54163d4abf0Sagc<br>
54263d4abf0Sagc<font class="type">int</font> <font
54363d4abf0Sagcclass="func">regawexec</font>(<font class="qual">const</font>
54463d4abf0Sagc<font class="type">regex_t</font> *<font
54563d4abf0Sagcclass="arg">preg</font>, <font class="qual">const</font> <font
54663d4abf0Sagcclass="type">wchar_t</font> *<font class="arg">string</font>,<br>
54763d4abf0Sagc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
54863d4abf0Sagc<font class="type">regamatch_t</font>
54963d4abf0Sagc*<font class="arg">match</font>,
55063d4abf0Sagc<font class="type">regaparams_t</font>
55163d4abf0Sagc<font class="arg">params</font>,
55263d4abf0Sagc<font class="type">int</font>
55363d4abf0Sagc<font class="arg">eflags</font>);
55463d4abf0Sagc<br>
55563d4abf0Sagc<font class="type">int</font>
55663d4abf0Sagc<font class="func">regawnexec</font>(
55763d4abf0Sagc<font class="qual">const</font>
55863d4abf0Sagc<font class="type">regex_t</font>
55963d4abf0Sagc*<font class="arg">preg</font>,
56063d4abf0Sagc<font class="qual">const</font>
56163d4abf0Sagc<font class="type">wchar_t</font>
56263d4abf0Sagc*<font class="arg">string</font>,
56363d4abf0Sagc<font class="type">size_t</font>
56463d4abf0Sagc<font class="arg">len</font>,<br>
56563d4abf0Sagc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
56663d4abf0Sagc<font class="type">regamatch_t</font>
56763d4abf0Sagc*<font class="arg">match</font>,
56863d4abf0Sagc<font class="type">regaparams_t</font>
56963d4abf0Sagc<font class="arg">params</font>,
57063d4abf0Sagc<font class="type">int</font>
57163d4abf0Sagc<font class="arg">eflags</font>);
57263d4abf0Sagc<br>
57363d4abf0Sagc</code>
57463d4abf0Sagc</div>
57563d4abf0Sagc
57663d4abf0Sagc<p>
57763d4abf0SagcThe <tt><font class="func">regaexec</font>()</tt> function searches for
57863d4abf0Sagcthe best match in <tt><font class="arg">string</font></tt>
57963d4abf0Sagcagainst the compiled regexp <tt><font
58063d4abf0Sagcclass="arg">preg</font></tt>, initialized by a previous call to
58163d4abf0Sagcany one of the <a href="#regcomp"><tt>regcomp</tt></a> functions.
58263d4abf0Sagc</p>
58363d4abf0Sagc
58463d4abf0Sagc<p>
58563d4abf0SagcThe <tt><font class="func">reganexec</font>()</tt> function is like
58663d4abf0Sagc<tt><font class="func">regaexec</font>()</tt>, but <tt><font
58763d4abf0Sagcclass="arg">string</font></tt> is not terminated by a null byte.
58863d4abf0SagcInstead, the <tt><font class="arg">len</font></tt> argument is used to
58963d4abf0Sagctell the length of the string, and the string may contain null
59063d4abf0Sagcbytes. The <tt><font class="func">regawexec</font>()</tt> and
59163d4abf0Sagc<tt><font class="func">regawnexec</font>()</tt> functions work like
59263d4abf0Sagc<tt><font class="func">regaexec</font>()</tt> and <tt><font
59363d4abf0Sagcclass="func">reganexec</font>()</tt>, respectively, but take a wide
59463d4abf0Sagccharacter (<tt><font class="type">wchar_t</font></tt>) string instead
59563d4abf0Sagcof a byte string.
59663d4abf0Sagc</p>
59763d4abf0Sagc
59863d4abf0Sagc<p>
59963d4abf0SagcThe <tt><font class="arg">eflags</font></tt> argument is like for
60063d4abf0Sagcthe regexec() functions.
60163d4abf0Sagc</p>
60263d4abf0Sagc
60363d4abf0Sagc<p>
60463d4abf0SagcThe <tt><font class="arg">params</font></tt> struct controls the
60563d4abf0Sagcapproximate matching parameters:
60663d4abf0Sagc<blockquote>
60763d4abf0Sagc<dl>
60863d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
60963d4abf0Sagc      <tt><font class="arg">cost_ins</font></tt></dt>
61063d4abf0Sagc  <dd>The default cost of an inserted character, that is, an extra
61163d4abf0Sagc      character in <tt><font class="arg">string</font></tt>.</dd>
61263d4abf0Sagc
61363d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
61463d4abf0Sagc      <tt><font class="arg">cost_del</font></tt></dt>
61563d4abf0Sagc  <dd>The default cost of a deleted character, that is, a character
61663d4abf0Sagc      missing from <tt><font class="arg">string</font></tt>.</dd>
61763d4abf0Sagc
61863d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
61963d4abf0Sagc      <tt><font class="arg">cost_subst</font></tt></dt>
62063d4abf0Sagc  <dd>The default cost of a substituted character.</dd>
62163d4abf0Sagc
62263d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
62363d4abf0Sagc      <tt><font class="arg">max_cost</font></tt></dt>
62463d4abf0Sagc  <dd>The maximum allowed cost of a match.  If this is set to zero,
62563d4abf0Sagc      an exact matching is searched for, and results equivalent to
62663d4abf0Sagc      those returned by the <tt>regexec()</tt> functions are
62763d4abf0Sagc      returned.</dd>
62863d4abf0Sagc
62963d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
63063d4abf0Sagc      <tt><font class="arg">max_ins</font></tt></dt>
63163d4abf0Sagc  <dd>Maximum allowed number of inserted characters.</dd>
63263d4abf0Sagc
63363d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
63463d4abf0Sagc      <tt><font class="arg">max_del</font></tt></dt>
63563d4abf0Sagc  <dd>Maximum allowed number of deleted characters.</dd>
63663d4abf0Sagc
63763d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
63863d4abf0Sagc      <tt><font class="arg">max_subst</font></tt></dt>
63963d4abf0Sagc  <dd>Maximum allowed number of substituted characters.</dd>
64063d4abf0Sagc
64163d4abf0Sagc  <dt><tt><font class="type">int</font></tt>
64263d4abf0Sagc      <tt><font class="arg">max_err</font></tt></dt>
64363d4abf0Sagc  <dd>Maximum allowed number of errors (inserts + deletes +
64463d4abf0Sagc      substitutes).</dd>
64563d4abf0Sagc</dl>
64663d4abf0Sagc</blockquote>
64763d4abf0Sagc
64863d4abf0Sagc<p>
64963d4abf0SagcThe <tt><font class="arg">match</font></tt> argument points to a
65063d4abf0Sagc<tt><font class="type">regamatch_t</font></tt> structure.  The
65163d4abf0Sagc<tt><font class="arg">nmatch</font></tt> and <tt><font
65263d4abf0Sagcclass="arg">pmatch</font></tt> field must be filled by the caller.  If
65363d4abf0Sagc<code>REG_NOSUB</code> was used when compiling the regexp, or
65463d4abf0Sagc<code>match-&gt;nmatch</code> is zero, or
65563d4abf0Sagc<code>match-&gt;pmatch</code> is <code>NULL</code>, the
65663d4abf0Sagc<code>match-&gt;pmatch</code> argument is ignored.  Otherwise, the
65763d4abf0Sagcsubmatches corresponding to the parenthesized subexpressions are
65863d4abf0Sagcfilled in the elements of <code>match-&gt;pmatch</code>, which must be
65963d4abf0Sagcdimensioned to have at least <code>match-&gt;nmatch</code> elements.
66063d4abf0SagcThe <code>match-&gt;cost</code> field is set to the cost of the match
66163d4abf0Sagcfound, and the <code>match-&gt;num_ins</code>,
66263d4abf0Sagc<code>match-&gt;num_del</code>, and <code>match-&gt;num_subst</code>
66363d4abf0Sagcfields are set to the number of inserts, deletes, and substitutes in
66463d4abf0Sagcthe match, respectively.
66563d4abf0Sagc</p>
66663d4abf0Sagc
66763d4abf0Sagc<p>
66863d4abf0SagcThe <tt>regaexec()</tt> functions return zero if a match with cost
66963d4abf0Sagcsmaller than <code>params-&gt;max_cost</code> was found, otherwise
67063d4abf0Sagcthey return <code>REG_NOMATCH</code> to indicate no match, or
67163d4abf0Sagc<code>REG_ESPACE</code> to indicate that enough temporary memory could
67263d4abf0Sagcnot be allocated to complete the matching operation.
67363d4abf0Sagc</p>
67463d4abf0Sagc
67563d4abf0Sagc<h2>Miscellaneous</h2>
67663d4abf0Sagc
67763d4abf0Sagc<div class="code">
67863d4abf0Sagc<code>
67963d4abf0Sagc#include &lt;tre/regex.h&gt;
68063d4abf0Sagc<br>
68163d4abf0Sagc<br>
68263d4abf0Sagc<font class="type">int</font> <font
68363d4abf0Sagcclass="func">tre_have_backrefs</font>(<font class="qual">const</font>
68463d4abf0Sagc<font class="type">regex_t</font> *<font class="arg">preg</font>);
68563d4abf0Sagc<br>
68663d4abf0Sagc<font class="type">int</font> <font
68763d4abf0Sagcclass="func">tre_have_approx</font>(<font class="qual">const</font>
68863d4abf0Sagc<font class="type">regex_t</font> *<font class="arg">preg</font>);
68963d4abf0Sagc<br>
69063d4abf0Sagc</code>
69163d4abf0Sagc</div>
69263d4abf0Sagc
69363d4abf0Sagc<p>
69463d4abf0SagcThe <tt><font class="func">tre_have_backrefs</font>()</tt> and
69563d4abf0Sagc<tt><font class="func">tre_have_approx</font>()</tt> functions return
69663d4abf0Sagc1 if the compiled pattern has back references or uses approximate
69763d4abf0Sagcmatching, respectively, and 0 if not.
69863d4abf0Sagc</p>
69963d4abf0Sagc
70063d4abf0Sagc
70163d4abf0Sagc<h2>Checking build time options</h2>
70263d4abf0Sagc
70363d4abf0Sagc<a name="tre_config"></a>
70463d4abf0Sagc<div class="code">
70563d4abf0Sagc<code>
70663d4abf0Sagc#include &lt;tre/regex.h&gt;
70763d4abf0Sagc<br>
70863d4abf0Sagc<br>
70963d4abf0Sagc<font class="type">char</font> *<font
71063d4abf0Sagcclass="func">tre_version</font>(<font class="type">void</font>);
71163d4abf0Sagc<br>
71263d4abf0Sagc<font class="type">int</font> <font
71363d4abf0Sagcclass="func">tre_config</font>(<font class="type">int</font> <font
71463d4abf0Sagcclass="arg">query</font>, <font class="type">void</font> *<font
71563d4abf0Sagcclass="arg">result</font>);
71663d4abf0Sagc<br>
71763d4abf0Sagc</code>
71863d4abf0Sagc</div>
71963d4abf0Sagc
72063d4abf0Sagc<p>
72163d4abf0SagcThe <tt><font class="func">tre_config</font>()</tt> function can be
72263d4abf0Sagcused to retrieve information of which optional features have been
72363d4abf0Sagccompiled into the TRE library and information of other parameters that
72463d4abf0Sagcmay change between releases.
72563d4abf0Sagc</p>
72663d4abf0Sagc
72763d4abf0Sagc<p>
72863d4abf0SagcThe <tt><font class="arg">query</font></tt> argument is an integer
72963d4abf0Sagctelling what information is requested for.  The <tt><font
73063d4abf0Sagcclass="arg">result</font></tt> argument is a pointer to a variable
73163d4abf0Sagcwhere the information is returned.  The return value of a call to
73263d4abf0Sagc<tt><font class="func">tre_config</font>()</tt> is zero if <tt><font
73363d4abf0Sagcclass="arg">query</font></tt> was recognized, REG_NOMATCH otherwise.
73463d4abf0Sagc</p>
73563d4abf0Sagc
73663d4abf0Sagc<p>
73763d4abf0SagcThe following values are recognized for <tt><font
73863d4abf0Sagcclass="arg">query</font></tt>:
73963d4abf0Sagc
74063d4abf0Sagc<blockquote>
74163d4abf0Sagc<dl>
74263d4abf0Sagc<dt><tt>TRE_CONFIG_APPROX</tt></dt>
74363d4abf0Sagc<dd>The result is an integer that is set to one if approximate
74463d4abf0Sagcmatching support is available, zero if not.</dd>
74563d4abf0Sagc<dt><tt>TRE_CONFIG_WCHAR</tt></dt>
74663d4abf0Sagc<dd>The result is an integer that is set to one if wide character
74763d4abf0Sagcsupport is available, zero if not.</dd>
74863d4abf0Sagc<dt><tt>TRE_CONFIG_MULTIBYTE</tt></dt>
74963d4abf0Sagc<dd>The result is an integer that is set to one if multibyte character
75063d4abf0Sagcset support is available, zero if not.</dd>
75163d4abf0Sagc<dt><tt>TRE_CONFIG_SYSTEM_ABI</tt></dt>
75263d4abf0Sagc<dd>The result is an integer that is set to one if TRE has been
75363d4abf0Sagccompiled to be compatible with the system regex ABI, zero if not.</dd>
75463d4abf0Sagc<dt><tt>TRE_CONFIG_VERSION</tt></dt>
75563d4abf0Sagc<dd>The result is a pointer to a static character string that gives
75663d4abf0Sagcthe version of the TRE library.</dd>
75763d4abf0Sagc</dl>
75863d4abf0Sagc</blockquote>
75963d4abf0Sagc
76063d4abf0Sagc
76163d4abf0Sagc<p>
76263d4abf0SagcThe <tt><font class="func">tre_version</font>()</tt> function returns
76363d4abf0Sagca short human readable character string which shows the software name,
76463d4abf0Sagcversion, and license.
76563d4abf0Sagc
76663d4abf0Sagc<h2>Preprocessor definitions</h2>
76763d4abf0Sagc
76863d4abf0Sagc<p>The header <tt>&lt;tre/regex.h&gt;</tt> defines certain
76963d4abf0SagcC preprocessor symbols.
77063d4abf0Sagc
77163d4abf0Sagc<h3>Version information</h3>
77263d4abf0Sagc
77363d4abf0Sagc<p>The following definitions may be useful for checking whether a new
77463d4abf0Sagcenough version is being used.  Note that it is recommended to use the
77563d4abf0Sagc<tt>pkg-config</tt> tool for version and other checks in Autoconf
77663d4abf0Sagcscripts.</p>
77763d4abf0Sagc
77863d4abf0Sagc<blockquote>
77963d4abf0Sagc<dl>
78063d4abf0Sagc<dt><tt>TRE_VERSION</tt></dt>
78163d4abf0Sagc<dd>The version string. </dd>
78263d4abf0Sagc
78363d4abf0Sagc<dt><tt>TRE_VERSION_1</tt></dt>
78463d4abf0Sagc<dd>The major version number (first part of version string).</dd>
78563d4abf0Sagc
78663d4abf0Sagc<dt><tt>TRE_VERSION_2</tt></dt>
78763d4abf0Sagc<dd>The minor version number (second part of version string).</dd>
78863d4abf0Sagc
78963d4abf0Sagc<dt><tt>TRE_VERSION_3</tt></dt>
79063d4abf0Sagc<dd>The micro version number (third part of version string).</dd>
79163d4abf0Sagc
79263d4abf0Sagc</dl>
79363d4abf0Sagc</blockquote>
79463d4abf0Sagc
79563d4abf0Sagc<h3>Features</h3>
79663d4abf0Sagc
79763d4abf0Sagc<p>The following definitions may be useful for checking whether all
79863d4abf0Sagcnecessary features are enabled.  Use these only if compile time
79963d4abf0Sagcchecking suffices (linking statically with TRE).  When linking
80063d4abf0Sagcdynamically <a href="#tre_config"><tt>tre_config()</tt></a> should be used
80163d4abf0Sagcinstead.</p>
80263d4abf0Sagc
80363d4abf0Sagc<blockquote>
80463d4abf0Sagc<dl>
80563d4abf0Sagc<dt><tt>TRE_APPROX</tt></dt>
80663d4abf0Sagc<dd>This is defined if approximate matching support is enabled.  The
80763d4abf0Sagcprototypes for approximate matching functions are defined only if
80863d4abf0Sagc<tt>TRE_APPROX</tt> is defined.</dd>
80963d4abf0Sagc
81063d4abf0Sagc<dt><tt>TRE_WCHAR</tt></dt>
81163d4abf0Sagc<dd>This is defined if wide character support is enabled.  The
81263d4abf0Sagcprototypes for wide character matching functions are defined only if
81363d4abf0Sagc<tt>TRE_WCHAR</tt> is defined.</dd>
81463d4abf0Sagc
81563d4abf0Sagc<dt><tt>TRE_MULTIBYTE</tt></dt>
81663d4abf0Sagc<dd>This is defined if multibyte character set support is enabled.
81763d4abf0SagcIf this is not set any locale settings are ignored, and the default
81863d4abf0Sagclocale is used when parsing regexps and matching strings.</dd>
81963d4abf0Sagc
82063d4abf0Sagc</dl>
82163d4abf0Sagc</blockquote>
822