期望中的正则表达式

时间:2012-06-19 15:50:59

标签: regex tcl expect

我对TCL / EXPECT中的以下代码有疑问:

expect { 
    timeout { 
        puts "timeout error"
    }
    -re "Please enter the play name" {
        exp_send $common1
        exp_continue
    }
    -re "Please enter the play name_type" {
        exp_send $common2
        exp_continue
    }
    -re "Now you can get the information of the play" {
        expect {
        -re "\r"
            }
    }
    }

如果我运行上面的代码,它将被卡在第二个代码块(-re“请输入play name_type”)。为什么会这样?如果我在顶部移动第二个代码块(-re“请输入play name_type”),前两个将通过。是什么原因?

好像第三个代码块永远不会被执行,我在其中添加了一些跟踪:puts "executed!!!!",消息永远不会显示,并且似乎忽略了第三个代码块并执行了下面的代码整个期待块,如何解决?

1 个答案:

答案 0 :(得分:0)

由于第一个模式是第二个模式的子字符串,因此第一个模式将匹配两次。使用expect -re时,通常建议匹配一行的结尾,所以

expect { 
    timeout { 
        puts "timeout error"
    }
    -re "Please enter the play name: $" {
        exp_send $common1
        exp_continue
    }
    -re "Please enter the play name_type: $" {
        exp_send $common2
        exp_continue
    }
    -re "Now you can get the information of the play.*\r" 
}
# continue processing here

我假设问题以冒号,空格和行尾结束。相应调整。

我通常建议:在调试或开发程序时,将exp_internal 1添加到脚本的顶部。