2014-05-14 126 views
0

期望我需要匹配期望以下输出正则表达式与TCL

1/ 5 SOMETEXT  Active 

我使用以下代码

expect -re "1\/\s+(\d)\s+SOMETEXT\s+Active" 
send "\r" 
puts $expect_out(0,string) 

在这里,我匹配位数“5”从输入文字。

但是,使用此代码,期望无法从输入中找到结果。

+1

您是否尝试过使用'exp_internal 1'启用调试?这通常足以解决这些问题的底部......它会告诉你什么是匹配,什么是不匹配,你可以从那里获得信息,以调整你的RE。 – James

+0

你期待的Tcl版本是什么? 'puts [info patchlevel]' –

回答

1

你想expect_out(1,string) - 这是第一个捕获组
expect_out(0,string)包含匹配的正则表达式

$ expect 
expect1.1> spawn sh -c {echo '1/ 5 SOMETEXT  Active'} 
spawn sh -c echo '1/ 5 SOMETEXT  Active' 
4093 
expect1.2> expect -re {1/\s+(\d+)\s+SOMETEXT\s+Active} 
1/ 5 SOMETEXT  Active 
expect1.3> puts $expect_out(1,string) 
5 
expect1.4> puts $expect_out(0,string) 
1/ 5 SOMETEXT  Active 
+1

将正则表达式放在大括号中通常会更好,以避免特殊字符与正则表达式之间的任何冲突以及特殊字符与Tcl之间的冲突。 –

+0

谢谢格伦:) – Dinesh

1

你必须在这段代码有问题的文字部分;那里有反斜杠需要引用,所以他们去了RE引擎。尝试下列操作之一:还

expect -re "1/\\s+(\\d)\\s+SOMETEXT\\s+Active" 
expect -re {1/\s+(\d)\s+SOMETEXT\s+Active} 

注意/是不是特别在所有Tcl的RE引擎到Tcl的;这只是一个普通的角色。你永远不需要引用它本身(不像\你需要小心)。