来自变量和特殊字符的tcl regexp

时间:2014-09-03 08:27:54

标签: regex tcl

我有点困惑 我的输入字符串是“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

有人可以解释为什么吗? 感谢

1 个答案:

答案 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]}

不会评估字符串。它将包含所有$[字符,就像您键入它们一样。