| <head> |
| <title>regexp(3) - Plan 9 from User Space</title> |
| <meta content="text/html; charset=utf-8" http-equiv=Content-Type> |
| </head> |
| <body bgcolor=#ffffff> |
| <table border=0 cellpadding=0 cellspacing=0 width=100%> |
| <tr height=10><td> |
| <tr><td width=20><td> |
| <tr><td width=20><td><b>REGEXP(3)</b><td align=right><b>REGEXP(3)</b> |
| <tr><td width=20><td colspan=2> |
| <br> |
| <p><font size=+1><b>NAME </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| regcomp, regcomplit, regcompnl, regexec, regsub, rregexec, rregsub, |
| regerror – regular expression<br> |
| |
| </table> |
| <p><font size=+1><b>SYNOPSIS </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <tt><font size=+1>#include <u.h><br> |
| #include <libc.h><br> |
| #include <regexp.h> |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>Reprog *regcomp(char *exp) |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>Reprog *regcomplit(char *exp) |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>Reprog *regcompnl(char *exp) |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>int regexec(Reprog *prog, char *string, Resub *match, int msize)<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>void regsub(char *source, char *dest, int dlen, Resub *match, |
| int msize)<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>int rregexec(Reprog *prog, Rune *string, Resub *match, int msize)<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>void rregsub(Rune *source, Rune *dest, int dlen, Resub *match, |
| int msize)<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| <tt><font size=+1>void regerror(char *msg)<br> |
| </font></tt> |
| </table> |
| <p><font size=+1><b>DESCRIPTION </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <i>Regcomp</i> compiles a regular expression and returns a pointer to |
| the generated description. The space is allocated by <a href="../man3/malloc.html"><i>malloc</i>(3)</a> |
| and may be released by <i>free</i>. Regular expressions are exactly as |
| in <a href="../man7/regexp.html"><i>regexp</i>(7)</a>. |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| |
| <i>Regcomplit</i> is like <i>regcomp</i> except that all characters are treated |
| literally. <i>Regcompnl</i> is like <i>regcomp</i> except that the <tt><font size=+1>.</font></tt> metacharacter |
| matches all characters, including newlines. |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| |
| <i>Regexec</i> matches a null-terminated <i>string</i> against the compiled |
| regular expression in <i>prog</i>. If it matches, <i>regexec</i> returns <tt><font size=+1>1</font></tt> and |
| fills in the array <i>match</i> with character pointers to the substrings |
| of <i>string</i> that correspond to the parenthesized subexpressions |
| of <i>exp</i>: <tt><font size=+1>match[</font></tt><i>i</i><tt><font size=+1>].sp</font></tt> points to the beginning and |
| <tt><font size=+1>match[</font></tt><i>i</i><tt><font size=+1>].ep</font></tt> points just beyond the end of the <i>i</i>th substring. (Subexpression |
| <i>i</i> begins at the <i>i</i>th left parenthesis, counting from 1.) Pointers |
| in <tt><font size=+1>match[0]</font></tt> pick out the substring that corresponds to the whole |
| regular expression. Unused elements of <i>match</i> are filled with zeros. |
| Matches involving <tt><font size=+1>*</font></tt>, <tt><font size=+1>+</font></tt>, and <tt><font size=+1>?</font></tt> are |
| extended as far as possible. The number of array elements in <i>match</i> |
| is given by <i>msize</i>. The structure of elements of <i>match</i> is:<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <tt><font size=+1>typedef struct {<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| union {<br> |
| char *sp;<br> |
| Rune *rsp;<br> |
| } s;<br> |
| union {<br> |
| char *ep;<br> |
| Rune *rep;<br> |
| } e;<br> |
| |
| </table> |
| } Resub;<br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| </font></tt> |
| |
| </table> |
| If <tt><font size=+1>match[0].s.sp</font></tt> is nonzero on entry, <i>regexec</i> starts matching |
| at that point within <i>string</i>. If <tt><font size=+1>match[0].e.ep</font></tt> is nonzero on entry, |
| the last character matched is the one preceding that point. |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| |
| <i>Regsub</i> places in <i>dest</i> a substitution instance of <i>source</i> in the |
| context of the last <i>regexec</i> performed using <i>match</i>. Each instance |
| of <tt><font size=+1>\</font></tt><i>n</i>, where <i>n</i> is a digit, is replaced by the string delimited |
| by <tt><font size=+1>match[</font></tt><i>n</i><tt><font size=+1>].sp</font></tt> and <tt><font size=+1>match[</font></tt><i>n</i><tt><font size=+1>].ep</font></tt>. Each instance of <tt><font size=+1>&</font></tt> is replaced |
| by the string delimited by <tt><font size=+1>match[0].sp</font></tt> and |
| <tt><font size=+1>match[0].ep</font></tt>. The substitution will always be null terminated and |
| trimmed to fit into dlen bytes. |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| |
| <i>Regerror</i>, called whenever an error is detected in <i>regcomp</i>, writes |
| the string <i>msg</i> on the standard error file and exits. <i>Regerror</i> |
| can be replaced to perform special error processing. If the user |
| supplied <i>regerror</i> returns rather than exits, <i>regcomp</i> will return |
| 0. |
| <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table> |
| |
| <i>Rregexec</i> and <i>rregsub</i> are variants of <i>regexec</i> and <i>regsub</i> that use |
| strings of <tt><font size=+1>Runes</font></tt> instead of strings of <tt><font size=+1>chars</font></tt>. With these routines, |
| the <i>rsp</i> and <i>rep</i> fields of the <i>match</i> array elements should be used.<br> |
| |
| </table> |
| <p><font size=+1><b>SOURCE </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <tt><font size=+1>/usr/local/plan9/src/libregexp<br> |
| </font></tt> |
| </table> |
| <p><font size=+1><b>SEE ALSO </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <a href="../man1/grep.html"><i>grep</i>(1)</a><br> |
| |
| </table> |
| <p><font size=+1><b>DIAGNOSTICS </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| <i>Regcomp</i> returns <tt><font size=+1>0</font></tt> for an illegal expression or other failure. |
| <i>Regexec</i> returns 0 if <i>string</i> is not matched.<br> |
| |
| </table> |
| <p><font size=+1><b>BUGS </b></font><br> |
| |
| <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td> |
| |
| There is no way to specify or match a NUL character; NULs terminate |
| patterns and strings.<br> |
| |
| </table> |
| |
| <td width=20> |
| <tr height=20><td> |
| </table> |
| <!-- TRAILER --> |
| <table border=0 cellpadding=0 cellspacing=0 width=100%> |
| <tr height=15><td width=10><td><td width=10> |
| <tr><td><td> |
| <center> |
| <a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a> |
| </center> |
| </table> |
| <!-- TRAILER --> |
| </body></html> |