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