我有点困惑 我的输入字符串是“foo / 1” 我的动机是将foo设置为变量并正则表达式:
set line " foo/1"
set a foo
regexp "\s$a" $line does not work
我也注意到,只有当我使用卷曲并给出确切的字符串括号时才能正常工作
regexp {\sfoo} $line works
regexp "\sfoo" $line doesnt work
有人可以解释为什么吗? 感谢
答案 0 :(得分:4)
快速回答:
"\\s"
== {\s}
答案很长:
在Tcl中,如果使用""
键入一个字符串来封闭它,则首先评估内部的所有内容,然后将其用作字符串。这意味着\s
被评估(解释)为转义字符,而不是两个字符。
如果您想在\
字符串中键入""
字符,您也必须将其转义:\\
。在您的情况下,您必须输入"\\sfoo"
。
如果{}
包含字符串,则始终引用它们,不需要重复反斜杠。
如果要在字符串中使用变量或内联命令,则使用""
是很好的,例如:
puts "The value $var and the command result: [someCommand $arg]"
以上内容将评估$var
和[someCommand $arg]
并将其放入字符串中。
如果您使用过大括号,例如:
puts {The value $var and the command result: [someCommand $arg]}
不会评估字符串。它将包含所有$
和[
字符,就像您键入它们一样。