在带有方括号且变量定义为索引的字符串上,我无法使用当前模式进行正则表达式替换。
我尝试了代码中描述的以下内容
set p "not r\[0\]"
set bit 0
set value 1
set x [regsub -all {r\[$bit\]} $p $value]
预期结果是x =“ not 1” 输出= 0
答案 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 metacharacter(set x [regsub -all [format {r\[%s\]} $bit] $p $value]
)放在双引号中:
***=