TCL regsub несколько специальных символов в одном кадре
Есть ли способ добавить escape '\' в строку с несколькими специальными символами?
Пример ввода: a/b[1]/c/d{3}
Желаемый результат: a\/b\[1\]\/c\/d\{3\}
Я сделал это в нескольких regsubs один специальный символ за раз. Но есть ли способ сделать это одним выстрелом?
2 ответа
Я бы просто избежал всех несловарных символов:
set input {a/b[1]/c/d{3}}
set output [regsub -all {\W} $input {\\&}]
puts $output
a\/b\[1\]\/c\/d\{3\}
ref: https://tcl.tk/man/tcl8.6/TclCmd/regsub.htm и https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm
Общий подход заключается в создании набора символов RE ([…]
) и использовать это. Вы должны быть немного осторожнее с ними в некоторых случаях (некоторые символы в них особенные, особенно ^
, ]
, -
а также \
), но это не так уж сложно.
regsub -all {[][/{}]} $input {\\&}
Однако, если вы можете использовать классы символов (такие как \W
или же [^\w]
) тогда это намного проще и легче для чтения. Наиболее распространенные случаи необходимости применять обратную косую черту работают с ними.