Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Tcl中连接大括号转义的字符串?_Tcl_Expect - Fatal编程技术网

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

如何在Tcl中连接大括号转义的字符串?,tcl,expect,Tcl,Expect,我在Expect脚本中编写正则表达式,并希望使用[0-9]+\r作为正则表达式模式。为了防止[…]替换,我使用了曲线支架: expect -re {([0-9]+)\r} {...} 但是{…}中的\r在被视为两个字符的大括号中没有特殊意义。我试着 expect -re {([0-9]+)}\r {...} 但这是一个解析错误。我试着 expect -re [concat {([0-9]+)} "\r"] {...} 但是concat在arg之间添加了空格 另外,我知道另一个解决方案。。。引用[

我在Expect脚本中编写正则表达式,并希望使用[0-9]+\r作为正则表达式模式。为了防止[…]替换,我使用了曲线支架:

expect -re {([0-9]+)\r} {...} 但是{…}中的\r在被视为两个字符的大括号中没有特殊意义。我试着

expect -re {([0-9]+)}\r {...} 但这是一个解析错误。我试着

expect -re [concat {([0-9]+)} "\r"] {...} 但是concat在arg之间添加了空格

另外,我知道另一个解决方案。。。引用[:


但是想听听{…}引用样式的解决方案…

除了执行以下操作之一之外,没有其他方法: regexp[string map{[0-9]+:spaceholder:}:spaceholder:\r]。。。 regexp[list\[0-9\]+\r]。。。 我的例子是关于regexp的,因为我从来没有见过字符串作为模式在regexp命令中工作,只使用列表。 您可以尝试这样的方法:设置p{[0-9]+};追加p\r,然后使用$p,或者只设置p{[0-9]+};regexp$p\r。。。
您的空格问题:[join a b]

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

expect -re "(\[0-9\]+)\r" ...
如果要连接:

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

没有其他方法意味着什么?当然还有其他方法来实现串接字符串的最终目标。Tcl的RE引擎(希望在引擎盖下使用)最肯定会将\r解释为回车符。但是,想要与之匹配是很少见的,但它通常用于发送给衍生pro的字符串中gram。我不知道发生了什么。我用[0-9]+\r代替[0-9]+\r省略了第二个反斜杠。这很有效,但我不知道这是否正确。
set expression {([0-9]+)}
append expression "\r"
expect -r $expression