我需要在regsub
命令中将正则表达式作为变量传递。我想从cap
变量中删除括号,但我无法在match
变量中传递花括号。
set cap {[equality choice control]}
set match {\[}
regsub -all $match $cap "" cap
puts $cap
这样做的原因是我正在构建一个proc
,我需要将正则表达式作为参数传递。
答案 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]
会达到同样的效果。