Есть ли функция Tcl для автоматического добавления escape-символа?

Есть ли функция Tcl для автоматического добавления escape-символа в строку?

Например, у меня есть регулярное выражение

"[xy]"

После вызова функции я получаю

"\[xy]"

После повторного звонка я получаю

"\\\[xy]"

Я помню, что была такая функция с каким-то языком сценариев, но я не могу вспомнить, какой это язык.


person Yorkwar    schedule 21.06.2012    source источник


Ответы (1)


Обычный способ добавления таких escape-символов, как «необходимых», заключается в использовании list (% — это моя подсказка Tcl):

% set s {[xy]}
[xy]
% set s [list $s]
{[xy]}
% set s [list $s]
{{[xy]}}

Команда list предпочитает не трогать, если это возможно, заключать в фигурные скобки, если это может сойти с рук, и прибегать к обратной косой черте в противном случае (поскольку обратную косую черту действительно невозможно прочитать).

Если вам действительно нужны обратные косые черты, string map или regsub сделают то, что вам нужно. Например:

set s [regsub -all {\W} $s {\\&}]
person Donal Fellows    schedule 21.06.2012
comment
Команда list создает списки, которые также являются командами «без подстановки» (т. е. никаких неожиданностей при чтении переменных или выполнении команд). - person Donal Fellows; 21.06.2012
comment
Оба они работают на меня. Второй добавляет '\' к каждому слову, что выглядит немного странно. - person Yorkwar; 25.06.2012