用tcl预期正则表达式

时间:2014-05-14 14:20:09

标签: regex tcl expect

我需要匹配以下输出的预期

1/ 5  SOMETEXT      Active

我正在使用以下代码

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

在这里,我匹配输入文本中的数字“5”。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

您在此代码中遇到问题;那里有反斜杠需要引用,所以他们去了RE引擎。尝试其中之一:

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

另请注意,/对Tcl的RE引擎到Tcl并不特别;这只是一个普通的角色。你永远不需要引用它(与你需要小心的\不同)。