Tcl中带有变量的带有方括号的字符串上的regsub问题

时间:2019-06-18 18:00:00

标签: regex tcl

在带有方括号且变量定义为索引的字符串上,我无法使用当前模式进行正则表达式替换。

我尝试了代码中描述的以下内容

set p "not r\[0\]"
set bit 0
set value 1
set x [regsub -all {r\[$bit\]} $p $value] 

预期结果是x =“ not 1” 输出= 0

1 个答案:

答案 0 :(得分:0)

不进行替换的原因是,您表达式要匹配文字字符串r[,然后匹配$,这意味着“行尾”,然后匹配文字字符串{{1} }。要允许变量的替换,您将必须使用双引号,但这意味着您必须更加谨慎地使用转义符,因为在这种情况下,您现在必须加倍转义(一个转义为反斜杠,另一个转义为方括号)。 ):

bit]

以上内容为您提供set p "not r\[0\]" set bit 0 set value 1 set x [regsub -all "r\\\[$bit\\\]" $p $value]

一些不太常见的解决方案,我猜想是尝试使用format进行替换:

not 1

或者将Tcl的string literal metacharacterset x [regsub -all [format {r\[%s\]} $bit] $p $value] )放在双引号中:

***=