如何连接Tcl中由大括号转义的字符串?

时间:2011-09-14 10:29:54

标签: tcl expect

我在Expect脚本中编写正则表达式,并希望使用([0-9] +)\ r 作为正则表达式模式。为防止 [...] 替换,我使用弯曲括号:

expect -re {([0-9]+)\r} {...}

{...} 中的 \ _ 在大括号中没有特殊含义(视为两个字符)。我试试

expect -re {([0-9]+)}\r {...}

但这需要解析错误。我试试

expect -re [concat {([0-9]+)} "\r"] {...}

concat 在args之间添加空格。

PS 即可。我通过引用 [

来了解“...”引用的另一种解决方案
expect -re "(\[0-9]+)\r" {...}

但希望通过 {...} 引用样式听取解决方案...

2 个答案:

答案 0 :(得分:5)

你是对的:\ r在{}中没有意义,因为你需要使用双引号,但需要转义方括号:

expect -re "(\[0-9\]+)\r" ...

如果你想连接:

set expression {([0-9]+)}
append expression "\r"
expect -r $expression

答案 1 :(得分:0)

除了这些之外别无他法:
regexp [string map {([0-9]+):spaceholder:} ":spaceholder:" "\r"] ...
regexp [list (\[0-9\]+)\r] ...
我的例子是regexp,因为我从未在regexp命令中看到“”(字符串)作为模式,只有列表。
你可以尝试这样的事情:set p {([0-9]+)}; append p \r然后使用$pset p {([0-9]+)}; regexp $p\r ...
您对空间的问题:[join "a b" ""]