我是Expect和Tcl的新手。我正在使用Tcl中的expect编写一个代码来单独匹配一个模式(即没有模式是给定字符串中的子字符串).Code如下:
package require Expect
expect "^hi$" { send "pattern matched" }; # hi is the pattern to be matched
但是代码没有检测到你好。如果代码被修改如下,当模式出现在字符串的第一部分
时,它就会起作用 package require Expect
expect "^hi" { send "pattern matched" }
如果代码修改如下,即使预期与字符串末尾的模式匹配,它也无法正常工作
package require Expect
expect "hi$" { send "pattern matched" }
我做错了吗?请帮忙
答案 0 :(得分:0)
这确实有点神秘。
$
是字符串锚点的结尾,看起来在字符串结尾之前捕获了行尾。考虑到这一点,你可以用:
expect "Hi\n$" { puts "Wow" }
请注意\n
正在使用linux,但可能不适用于其他控制台类型!
答案 1 :(得分:0)
有些事情可能会出错,但最有可能的选择是在您期待的文本之后会出现某种额外的空格;期待所有字符,而不仅仅是可打印的字符。它可能是一个空间,它可能是一个换行符。如果您知道它是什么,请将其添加到您期望的内容中。否则,您需要一个更复杂的正则表达式:
# RE in braces because of the backslash; \s matches *ALL* types of whitespace
expect {^hi\s*$}
send "found it!"
另一种选择是切换RE匹配模式。默认情况下,Expect以全缓冲模式运行(它是最复杂场景中唯一合理的选项),但您可以将其置于面向行的模式中:
# The ‘n’ is mnemonically for Newline-aware
expect {(?n)^hi$}
send "found it!"