179 lines
8 KiB
HTML
179 lines
8 KiB
HTML
|
|
<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>
|