RE(3ast) RE(3ast)

# [NAME](#NAME)

recomp, reexec, ressub, refree, reerror − regular expression library

# [SYNOPSIS](#SYNOPSIS)

```
#include <re.h>
Re_program_t* recomp(char* pattern, int flags);
int reexec(Re_program_t* re, char* source);
void ressub(Re_program_t* re, Sfio_t* sp, char* old, char* new, int flags);
void reerror(char* message);
void refree(Re_program_t* re);
```

# [DESCRIPTION](#DESCRIPTION)

recomp compiles a regular expression in *pattern* and returns a pointer to the compiled regular expression. The space is allocated by [*malloc*(3)](/man/os/ksh/malloc.3) and may be released by refree. Regular expressions are as in [*egrep*(1)](/man/os/ksh/egrep.1) except that newlines are treated as ordinary characters and $ matches the end of a null-terminated string. *flags* may be RE\_EDSTYLE which specifies [*ed*(1)](/man/os/ksh/ed.1) style special characters, \\(, \\), \\?, \\+ and \\| for the [*egrep*(1)](/man/os/ksh/egrep.1) (, ), ? .ft 5 + and |, respectively.

reexec matches the null-terminated *source* string against the compiled regular expression *re* from a previous call to recomp. If it matches, reexec returns a non-zero value. If *flags* is RE\_MATCH then the array *re-&gt;match* is filled with character pointers to the substrings of *source* that correspond to the parenthesized subexpressions of *pattern*: *re-&gt;match\[i].sp* points to the beginning and *re-&gt;match\[i].ep* points just beyond the end of substring *i*. (Subexpression *i* begins at the *i*th matched left parenthesis, counting from 1.) Pointers in *re-&gt;match\[0]* pick out the substring that corresponds to the entire regular expression. Unused elements of *re-&gt;match* are filled with zeros. Matches involving \*, +, and ? .ft 5 are extended as far as possible. A maximum of 9 subexpressions will be matched. The structure of elements of *re-&gt;match* is:

```
	typedef struct
	{
		char* sp;
		char* ep;
	} rematch;
```

ressub places in the [*sfio*(3)](/man/os/ksh/sfio.3) stream *sp* a substitution instance of *old* to *new* in *source* in the context of the last reexec performed on *re-&gt;match*. Each instance of where *n* is a digit, is replaced by the string delimited by and Each instance of & is replaced by the string delimited by *re-&gt;match\[0].sp* and *re-&gt;match\[0].ep*. If RE\_ALL is set in *flags* then all occurrences of *old* are replaced by *new*. If RE\_LOWER \[RE\_UPPER] is set in *flags* then *old* is converted to lower \[upper] case.

reerror, called whenever an error is detected in recomp, reexec, or ressub, writes the string *msg* on the standard error file and exits. reerror may be replaced to perform special error processing.

# [DIAGNOSTICS](#DIAGNOSTICS)

recomp returns 0 for an invalid expression or other failure. reexec returns 1 if *source* is accepted, 0 otherwise.

# [SEE ALSO](#SEE_ALSO)

[ed(1)](/man/os/ksh/ed.1), [grep(1)](/man/os/ksh/grep.1), [expr(1)](/man/os/ksh/expr.1)

---

Document: re(3ast) from ksh 1.0.10-r36 (Chainguard OS)
Source: https://github.com/ksh93/ksh
