TCL一次注册多个特殊字符

TCL regsub multiple special characters in one shot

有没有办法将转义“\”添加到具有多个特殊字符的字符串中?

示例输入:a/b[1]/c/d{3}
期望的结果:a\/b\[1\]\/c\/d\{3\}

我已经在多个 regsubs 中一次完成一个特殊字符。但是有没有办法一次性搞定呢?

我会简单地转义所有 non-word 个字符:

set input {a/b[1]/c/d{3}}
set output [regsub -all {\W} $input {\&}]
puts $output
a\/b\[1\]\/c\/d\{3\}

参考:https://tcl.tk/man/tcl8.6/TclCmd/regsub.htm and https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm

一般的使用方法是构建一个 RE 字符集 ([…]) 并使用它。在某些情况下,您必须小心处理这些字符(某些字符在其中很特殊,尤其是 ^]-\),但这并不过分难。

regsub -all {[][/{}]} $input {\&}

但是,如果您可以使用字符 类(例如 \W[^\w]),那么它会更简单易读。需要应用反斜杠的最常见情况与这些一起使用。