REGEX(1F) (Form and Menu Language Interpreter Utilities)REGEX(1F)
NAME
regex - match patterns against a string
SYNOPSIS
| regex [-e] [pattern template]...pattern [template]
regex [-e] -v "string" [pattern template]...pattern
[template]
DESCRIPTION
The regex command takes a string (from stdin, or supplied
with -v) and a list of pattern/template pairs, and runs
regex(3X) on the string vs. each of the patterns until there
is a match. When a match occurs, it writes the
corresponding template to stdout and returns TRUE. The last
(or only) pattern does not need a template. If that is the
pattern that matches the string, the function simply returns
TRUE. If no match is found, regex returns FALSE.
The -e option tells the function to evaluate the
corresponding template and write the result to stdout.
The patterns are regular expressions of the form described
in regex(3X). In most cases the pattern should be enclosed
in single quotes to turn off special meanings of characters.
The template may contain the strings $m0 through $m9, which
will be expanded to the part of the pattern enclosed in (
... )$0 through ( ... )$9 constructs (see examples below).
Note that if you use this feature, you must be sure to
enclose the template in single quotes so that the
Interpreter doesn't expand the $m0 through $m9 variables at
parse time. This feature gives regex much of the power of
cut(1), paste(1), and grep(1), and some of the capabilities
of sed(1). If there is no template, the default is
"$m0$m1$m2$m3$m4$m5$m6$m7$m8$m9". Note that only the final
pattern may lack a template.
EXAMPLES
To "cut" the 4th through 8th letters out of a string:
Page 1 May 1989
REGEX(1F) (Form and Menu Language Interpreter Utilities)REGEX(1F)
`regex -v "my string is nice" '^.{3}(.{5})$0' '$m0'`
In a form, for validating input as an integer:
valid=`regex -v "$F5" '^[0-9]+$'`
In a form, to translate an environment variable which
contains one of the numbers 1, 2, 3, 4, 5 to the letters a,
b, c, d, e:
value=`regex -v "$VAR1" 1 a 2 b 3 c 4 d 5 e '.*' 'Error'`
Note the use of the pattern '.*' to mean "anything else".
In the example below, all three lines constitute a single
backquoted expression. This expression, by itself, could be
put in a menu descriptor file. Since backquoted expressions
are expanded as they are parsed, and output from a
backquoted expression (the cat command, in this example)
becomes part of the descriptor file being parsed, this
expression would read /etc/passwd and make a virtual menu of
all the login ids on the system.
`cat /etc/passwd | regex '^([^:]*)$0.*$' '
name=$m0
action=`message "$m0 is a user"`'`
DIAGNOSTICS
If none of the patterns match, regex returns FALSE,
otherwise TRUE.
WARNING
Patterns and templates must often be enclosed in single
quotes to turn off the special meanings of characters.
Especially if you use the $m0 through $m9 variables in the
template, since the Interpreter will expand the variables
(usually to "") before regex even sees them.
SEE ALSO
sed(1), grep(1), cut(1), paste(1), regcmp(3)
Page 2 May 1989
REGEX(1F) (Form and Menu Language Interpreter Utilities)REGEX(1F)
BUGS
The regular expressions accepted by regex differ slightly
from other utilities (i.e., sed, grep, awk, ed, etc.).
The regex command with the -e option forces subsequent
commands to be ignored. In other words, if a backquoted
statement appears as
`regex -e ...; command1; command2`
command1 and command2 would never be executed. However,
dividing the expression into two
`regex -e ...``command1; command2`
would yield the desired result.
Page 3 May 1989