string map
удалит все строчные буквы и цифры, если это сработает.Однако у вас также есть несбалансированные кавычки, что приводит к синтаксической ошибке при разрешении процедуры.
Я бы порекомендовал использовать regsub
.Сложной частью, однако, было бы найти правильное выражение для выполнения задачи.Я предложу следующее:
bind pub "-|-" !aa proc:aa
proc proc:aa { nick host handle channel arg } {
set line [lindex $arg 0]
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9]([^a-z0-9]|\y)} $line {\1\2} line
putnow "PRIVMSG $channel :$line"
}
В основном ([^a-z0-9]|\y)
соответствует символу, который не является буквенно-цифровым, или границе слова (которая будет совпадать, например, в начале предложения, или наконец предложения) и сохраняет его (это цель паренов).
Соответствующие группы хранятся в порядке, начиная с 1, поэтому в заменяющей части regsub
я помещаючасти, которые не следует заменять на прежние места.
Вышеприведенное должно работать нормально.
Технически вы могли бы пойти немного поудобнее с немного другим выражением:
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9](?![a-z0-9])} $line {\1} line
Который использует отрицательный прогноз ((?! ... )
).
В любом случае, если вы хотите получить более подробную информацию, я рекомендую прочитать руководство о синтаксисе регулярных выражений