Regex 在Tcl中将变量传递给带有正则表达式的命令
我试图将变量传递给正则表达式,以便在字符串列表中循环时使用。例如,我有一个字符串,它是:Regex 在Tcl中将变量传递给带有正则表达式的命令,regex,parsing,arguments,tcl,parameter-passing,Regex,Parsing,Arguments,Tcl,Parameter Passing,我试图将变量传递给正则表达式,以便在字符串列表中循环时使用。例如,我有一个字符串,它是: top/inst/name[i],其中i可以取不同的整数值 for {set i 0} {$i < $rows} {set i [expr {$i + 1}]} { my_command { top/inst/name[$i] top_o/inst_o/name[$i] } } 对于{set i 0}{$i > +i i/代码>而不是 i=i+1/ C或C++(或许多其他语言)。问题是 [<
top/inst/name[i]
,其中i
可以取不同的整数值
for {set i 0} {$i < $rows} {set i [expr {$i + 1}]} {
my_command { top/inst/name[$i] top_o/inst_o/name[$i] }
}
对于{set i 0}{$i<$rows}{set i[expr{$i+1}]}{
我的命令{top/inst/name[$i]top\u o/inst\u o/name[$i]}
}
如何告诉正则表达式解析器将
$I
视为一个数字?它抱怨$i
是一个命令 问题在于,[
..]
在这里有两个不同的用途,一个在基本Tcl中用作命令替换语法,另一个用于正则表达式作为字符集语法。考虑到括号似乎是某事物实际名称的一部分,我不确定您是否需要其中任何一个。所以你需要小心
为避免命令替换,您可以在[
和]
之前插入\
字符,也可以使用以下扩展功能:
为了避免另一个问题,您可以插入更多反斜杠(请注意,这会使事情在一段时间后变得难看),或者如果您确实在使用正则表达式来匹配文字(子)字符串,则可以在正则表达式前面加上***=
对于循环迭代子句,在
中使用incri
而不是set i[expr{$i+1}]
。它也做同样的事情,但是对于(人类)读者来说,它更短更清晰。这就像使用了代码> > +i i/代码>而不是<代码> i=i+1/<代码> C或C++(或许多其他语言)。问题是<代码> [< /代码>…代码> > /Cuff>在这里有两个不同的用途,一个是在基TCL中作为命令替换语法,一个是正则表达式作为字符集语法。考虑到括号似乎是某事物实际名称的一部分,我不确定您是否需要其中任何一个。所以你需要小心
为避免命令替换,您可以在[
和]
之前插入\
字符,也可以使用以下扩展功能:
为了避免另一个问题,您可以插入更多反斜杠(请注意,这会使事情在一段时间后变得难看),或者如果您确实在使用正则表达式来匹配文字(子)字符串,则可以在正则表达式前面加上***=
对于
循环迭代子句,在中使用incri
而不是set i[expr{$i+1}]
。它也做同样的事情,但是对于(人类)读者来说,它更短更清晰。这就像使用<代码> ++i i/COD>而不是<代码> i=I+1 < /Cord> C或C++(或许多其他语言)。
my_command [subst -nocommands { top/inst/name[$i] top_o/inst_o/name[$i] }]