Regular Expressions

The interact command provides the ability to match regular expressions just like the expect command. The syntax is identical. The pattern is preceded by the -re flag. For example, the following sends an X each time the user presses a tilde followed by any other character.

interact -re "~." {send "X"}

The tilde matches a tilde while the period matches any other character. Other special characters work as before.

When using regular expressions, it is possible to find out what characters were typed. Similar to the expect command, the interact command writes its matches to the array interact_out. If the characters ~abc were entered in the previous example, interact_out(0,string) would be set to ~a. The bc would be sent on to the spawned process and would not be saved anywhere.

As before, the -indices flag causes indices to be saved as well. Using this flag, the complete set of assignments would be:

set interact_out(0,start)  "0"
set interact_out(0,end)    "1"
set interact_out(0,string) "~a"

The number 0 plays the same role that it did in the expect command. Parentheses can be used to pick out submatches. Matching strings are stored in interact_out using the indices 1 through 9.

There is no buffer element in interact_out as there is in expect_out. The reason for this is that the interact command processes unmatched characters as they arrive. So by the time a match occurs, unmatched characters are no longer present. Hence, matches always start with the first character remaining ...

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.