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

-gl

-re

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.