Dejagnu /期望多线正则表达式

时间:2012-05-05 13:48:01

标签: regex unit-testing tcl expect

我正在DejaGNU为我的应用程序编写单元测试,而且我无法匹配mulitiline输出。

当我从输出中删除换行符\n时,我的规则匹配得很好。 例如

输出:0 123 0 123

expect {
  -re "^0 \\d+ 0 \\d+$" {pass "$test_name"}
}

我希望有这样的输出:

0 123
0 123

我尝试过每一次

"^0 \\d+\\n0 \\d+$"
"^0 \\d+\n0 \\d+$"
"^0 \\d+$\\n^0 \\d+$"
"^0 \\d+$\n^0 \\d+$"

但不是它们有效。

1 个答案:

答案 0 :(得分:2)

Expect确实有一个可以匹配的整体多线模式空间,但它并不一定能看到你的想法。特别是,新行最终可能被虚拟终端系统转换。试试这个:

expect {
    -re {^0 \d+[\r\n]{1,2}0 \d+$} {
        # Just for debugging (and you might need to write to a log...)
        binary scan $expect_out(0,string) c* byteList
        puts [join $byteList ","]
        # Now do the rest of your code
        pass "$test_name"
    }
}

请注意,我将RE放在大括号中而不是双引号,因为这会使反斜杠的数量减少。
一旦你知道Expect看到实际的内容,你就可以直接编码了。我通常只是说打印出来没有任何烦恼,但是因为你正在处理换行符,所以更容易读取ASCII字节。