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 <tre/regex.h> 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><tre/regex.h></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 <tre/regex.h> 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> 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> 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> 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 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 <tre/regex.h> 37163d4abf0Sagc<br> 37263d4abf0Sagc<br> 37363d4abf0Sagc<font class="qual">typedef struct</font> { 37463d4abf0Sagc<br> 37563d4abf0Sagc <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 <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 <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 <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> 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>>=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 <tre/regex.h> 48063d4abf0Sagc<br> 48163d4abf0Sagc<br> 48263d4abf0Sagc<font class="qual">typedef struct</font> {<br> 48363d4abf0Sagc <font class="type">int</font> 48463d4abf0Sagc<font class="arg">cost_ins</font>;<br> 48563d4abf0Sagc <font class="type">int</font> 48663d4abf0Sagc<font class="arg">cost_del</font>;<br> 48763d4abf0Sagc <font class="type">int</font> 48863d4abf0Sagc<font class="arg">cost_subst</font>;<br> 48963d4abf0Sagc <font class="type">int</font> 49063d4abf0Sagc<font class="arg">max_cost</font>;<br><br> 49163d4abf0Sagc <font class="type">int</font> 49263d4abf0Sagc<font class="arg">max_ins</font>;<br> 49363d4abf0Sagc <font class="type">int</font> 49463d4abf0Sagc<font class="arg">max_del</font>;<br> 49563d4abf0Sagc <font class="type">int</font> 49663d4abf0Sagc<font class="arg">max_subst</font>;<br> 49763d4abf0Sagc <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 <font class="type">size_t</font> 50363d4abf0Sagc<font class="arg">nmatch</font>;<br> 50463d4abf0Sagc <font class="type">regmatch_t</font> 50563d4abf0Sagc*<font class="arg">pmatch</font>;<br> 50663d4abf0Sagc <font class="type">int</font> 50763d4abf0Sagc<font class="arg">cost</font>;<br> 50863d4abf0Sagc <font class="type">int</font> 50963d4abf0Sagc<font class="arg">num_ins</font>;<br> 51063d4abf0Sagc <font class="type">int</font> 51163d4abf0Sagc<font class="arg">num_del</font>;<br> 51263d4abf0Sagc <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 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 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 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 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->nmatch</code> is zero, or 65563d4abf0Sagc<code>match->pmatch</code> is <code>NULL</code>, the 65663d4abf0Sagc<code>match->pmatch</code> argument is ignored. Otherwise, the 65763d4abf0Sagcsubmatches corresponding to the parenthesized subexpressions are 65863d4abf0Sagcfilled in the elements of <code>match->pmatch</code>, which must be 65963d4abf0Sagcdimensioned to have at least <code>match->nmatch</code> elements. 66063d4abf0SagcThe <code>match->cost</code> field is set to the cost of the match 66163d4abf0Sagcfound, and the <code>match->num_ins</code>, 66263d4abf0Sagc<code>match->num_del</code>, and <code>match->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->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 <tre/regex.h> 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 <tre/regex.h> 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><tre/regex.h></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