Ну, я искал в Интернете за последние 10 с лишним часов без удачи или успеха относительно этого ..regsub матч как индекс Lindex, против управляющих символов Irc
Я пытаюсь преобразовать управляющие коды ИРЦ (цвета и т. д.) в html, входной текст, вырванный из связанного события eggdrop tcl. Полужирный/подчеркивающий отлично работает .. еще не проверил курсив, но это не то, о чем идет речь.
.. Проблема в том, что мое регулярное выражение, похоже, соответствует неправильному символу. Я настроил свое регулярное выражение - я предположил, что знаю из предыдущего опыта в кодировании (в основном, php/js) - для сопоставления с \003(\d+)[,]?(\d*)(.*?)
, так как я хочу цифры после символа управления, а затем использовать в качестве индекса в списке , чтобы вытащить требуемый html hex-цвет. Тем не менее, число, которое вытаскивается, кажется, даже не является числом, а не отображается правильно в терминале, и вместо этого выглядит как контрольный символ (из моего опыта использования gedit).
Код для моего процесса ниже, это часть более крупного скрипта, который записывает текст в файл. Все остальное работает, но этот процесс.
На вопрос .. Что именно я сделал неправильно здесь? Единственное сообщение об ошибке, которое я получаю, похоже на «недопустимый индекс» (контрольный символ).
proc logger:control {text} {
set val {
{FFF}
{000}
{00007F}
{009000}
{FF0000}
{7F0000}
{9F009F}
{FF7F00}
{FFFF00}
{00F800}
{00908F}
{00FFFF}
{0000FF}
{FF00FF}
{7F7F7F}
{CFD0CF}
}
while {[regsub {\002(.*?)\002} $text {<b>\1</b>} text]} {}
while {[regsub {\037(.*?)\037} $text {<u>\1</u>} text]} {}
while {[regsub {\035(.*?)\035} $text {<i>\1</i>} text]} {}
while {[regsub {\003([0-9]+)[,]?(\d*)(.*?)} $text "</span><span style='color: [lindex $val \1] ;'>\3" text]} {}
#^the line that throws the error
while {[regsub {\003[^\d]} $text {$text</span>} text]} {}
return $text
}
Похоже, что tcl не заменяет '\ 1', что вызывает ошибку. Может быть, вы можете назначить первый catch переменной (например, catch), а затем вызвать ее в другом regsub 'lindex $ val $ catch'? – Jerry
@Jerry: Нет, это то, что Tcl заменяет '\ 1' слишком рано. –
Кажется, что спички RE выглядят более эффективно. Посмотрите, что делает опция '-all' для' regsub' ... –