Identifying Regular Expressions And Glob Patterns
In order to actually use a regular expression, you must do two things. First, you must backslash any characters that are special to both Tcl and regular expressions. For example, the regular expression to match a single digit is "[0-9]
“. To prevent Tcl from trying to evaluate 0-9
as a command, the leading bracket must be prefixed with a backslash so it looks like this:
\[0-9]
See Chapter 4 (p. 91) for more information on using backslashes.
The second thing you must do is to tell expect
that a pattern is a regular expression. By default, expect
assumes patterns are glob patterns. Another line can be added to Table 5-1.
glob |
regexp |
English |
|
|
pattern type prefix |
Patterns prefixed with -re
are regular expressions. For example, the following command matches "a
“, "aa
“, and "aaaaa
“. It does not match "ab
“.
expect -re "a*" ;# regexp pattern
Without the -re
, the command matches "aa
“, "ab
“, and "ac
" (among other things).
expect "a*" ;# glob pattern
It is possible to have a mixture of glob patterns and regular expressions. In the following example, "a*
" is a regular expression but "b*
" is a glob pattern.
expect { -re "a*" {action1} "b*" {action2} }
The expect
command also accepts the -gl
flag. The -gl
flag tells expect
that the pattern is a glob pattern. This is useful if the pattern looks like one of the keywords such as timeout
or a flag such as -re
.[21]
expect { eof {found_real_eof} -gl "timeout" {found_literal_timeout} -gl "-re" ...
Get Exploring Expect now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.