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