Regex TCL参数中的变量RE

Regex TCL参数中的变量RE,regex,tcl,Regex,Tcl,我有一个TCL进程,我试图将一个变量传递给正则表达式,但它无法识别它 proc _findit {RE} { if [ regexp -all -nocase $RE $Line Match ] { #DO STUFF } } _findit \sword\s 当对\u findit的调用求值时,转义被消除,因此变量RE的内容是字符串“swarks”。尝试用大括号括住图案,大括号将引用反斜杠,从而保留转义:

我有一个TCL进程,我试图将一个变量传递给正则表达式,但它无法识别它

proc _findit {RE} {
      if [
          regexp -all -nocase $RE $Line Match
         ] {
         #DO STUFF
         }
}

_findit \sword\s

当对
\u findit
的调用求值时,转义被消除,因此变量
RE
的内容是字符串
“swarks”
。尝试用大括号括住图案,大括号将引用反斜杠,从而保留转义:

_findit {\sword\s}
可以找到Tcl语法的文档,包括计算参数的规则

如果需要了解正在调用的命令中参数的外观,请在命令中添加以下行:

puts [info level 0]
这将在对调用求值后打印完整的参数列表,包括命令名

编辑以澄清
信息级别的使用

当时的
info-level
文档让我有点困惑,我写的不是完全正确的理解(但幸运的是结果基本正确)。如果在没有参数的情况下调用,
info-level
返回当前过程调用的堆栈级别号。如果使用参数(必须是数字)调用,它将返回由数字指定的堆栈级别的调用(名称和扩展参数)。如果数字大于0,则解释为绝对堆栈级别(1是从顶层调用的过程,2是从堆栈级别1调用的过程,等等)。如果小于1,则将其解释为相对堆栈级别(0表示此过程,-1表示调用方,-2表示调用方的调用方,等等)。因此,
[info level[info level]]
[info level 0]
给出相同的结果(即使
[info level]
不等于0),因为它们都以不同的方式指示当前堆栈级别

这类似于使用的编号方案
upvar
uplevel
,除了“相对”堆栈级别写入0,-1,-2。。。对于<代码>信息级别<代码>和0,1,2。。。对于
up*
,当“绝对”堆栈级别写入1、2、3、。。。对于
信息级别
和#1、#2、#3。。。对于
up*
(可以将顶层指定为#0)


文档:

当调用
\u findit
进行求值时,转义被消除,因此变量
RE
的内容是字符串
“swarks”
。尝试用大括号括住图案,大括号将引用反斜杠,从而保留转义:

_findit {\sword\s}
可以找到Tcl语法的文档,包括计算参数的规则

如果需要了解正在调用的命令中参数的外观,请在命令中添加以下行:

puts [info level 0]
这将在对调用求值后打印完整的参数列表,包括命令名

编辑以澄清
信息级别的使用

当时的
info-level
文档让我有点困惑,我写的不是完全正确的理解(但幸运的是结果基本正确)。如果在没有参数的情况下调用,
info-level
返回当前过程调用的堆栈级别号。如果使用参数(必须是数字)调用,它将返回由数字指定的堆栈级别的调用(名称和扩展参数)。如果数字大于0,则解释为绝对堆栈级别(1是从顶层调用的过程,2是从堆栈级别1调用的过程,等等)。如果小于1,则将其解释为相对堆栈级别(0表示此过程,-1表示调用方,-2表示调用方的调用方,等等)。因此,
[info level[info level]]
[info level 0]
给出相同的结果(即使
[info level]
不等于0),因为它们都以不同的方式指示当前堆栈级别

这类似于使用的编号方案
upvar
uplevel
,除了“相对”堆栈级别写入0,-1,-2。。。对于<代码>信息级别<代码>和0,1,2。。。对于
up*
,当“绝对”堆栈级别写入1、2、3、。。。对于
信息级别
和#1、#2、#3。。。对于
up*
(可以将顶层指定为#0)


文档:

$Line
是未定义的局部变量。您忘记声明它了吗?
$Line
是一个未定义的局部变量。您忘记申报了吗?谢谢!这正是我需要的“[info level[info level]]”,它向我展示了很多!非常感谢。这正是我需要的“[info level[info level]]”,它向我展示了很多!