Tcl - 将花括号传递给regsub命令中的变量

时间:2015-03-15 15:18:48

标签: tcl

我需要在regsub命令中将正则表达式作为变量传递。我想从cap变量中删除括号,但我无法在match变量中传递花括号。

set cap {[equality choice control]}
set match {\[}
regsub -all $match $cap "" cap
puts $cap

这样做的原因是我正在构建一个proc,我需要将正则表达式作为参数传递。

1 个答案:

答案 0 :(得分:3)

方括号在正则表达式和Tcl中都很特殊。要匹配文字括号,您需要在正则表达式中将其转义,并且需要在Tcl中单独转义。

% set match {[}
[
% regsub -all $match $cap ""
couldn't compile regular expression pattern: brackets [] not balanced

% set match {\[}
\[
% regsub -all $match $cap ""
equality choice control]

您也可以使用引号,但要确保处理Tcl转义要求。即:set match "\\\["

注意:对于简单替换,您可能会发现string map更易于使用:

set cap [string map [list "\[" ""] $cap]

会达到同样的效果。