tcl string命令不适用于regexp反向引用

时间:2016-12-29 11:28:40

标签: string tcl regsub

请参阅下面的代码,作为示例,我试图找到使用带有backrefeence的regsub作为有选择地使用string toupper的方法。我没有得到我所期望的结果。
请参阅下面的简单示例(是的,我知道我可以使用string toupper $string 0 0,但是,这只是为了显示原理,在一个简单的例子中)。

> puts [ regsub {^(.)} "min" "s\\1" ]
smin
> puts [ regsub {^(.)} "min" [ string toupper "\\1" ] ]
min

可以看出,在反向引用上应用的字符串toupper不起作用,但后向引用可用于双引号操作。
我正在使用TCL版。 8.6

1 个答案:

答案 0 :(得分:1)

string toupper正在运作,但没有做你想做的事; string toupper "\\1"只是字符串\1,因此regsub不会产生太大影响。问题是regsub没有办法“在替换站点运行此命令”;我多年来一直想要解决这个问题,但是从来没有真正这样做过(太多的项目让这个项目脱颖而出)。

相反,您需要regsub在命令中替换字符串,然后subst结果,但为了做到这一点,您需要首先使字符串安全{{1与subst一起使用。幸运的是,这实际上非常简单。

我将这一点分开,让您更容易检查每个阶段的具体内容:

string map