Поиск подстроки 52 в значении переменной 52/80 не работает в TCL

Код, который я использую:

set channel 52/80   
if {![ regexp { ([0-9]+)\/80 } $channel match cchannel ] } {
        puts "Channel regex-ed in \[SLVR\]\[SetAffected_channels\] is: $cchannel\n\n"
}

возвращает ошибку: невозможно прочитать "cchannel": такой переменной нет

Что-нибудь, что мне здесь не хватает?


person Tanbir    schedule 04.12.2019    source источник
comment
Как разделяется это регулярное выражение, пробелы `([0-9]+)\/80` или пробелы удаляются, чтобы получить ([0-9]+)\/80 ? Как вы ссылаетесь на группу захвата 1 в регулярном выражении? Почему косая черта экранирована \/? Что не работает кстати?   -  person    schedule 04.12.2019
comment
Если вы имеете в виду ‹regexp {‹space›‹pattern›‹space›}, то я удалил ‹space› и попробовал. Все равно не помогает. И под не работает я имею в виду, что когда я пытаюсь напечатать $cchannel, он говорит -- Невозможно прочитать cchannel: такой переменной нет. однако статус возврата регулярного выражения{} возвращает $? как НОЛЬ.   -  person Tanbir    schedule 04.12.2019
comment
Я не уверен, что понимаю ваш вопрос, поэтому оставляю комментарий вместо ответа, но если ваша проблема заключается только в захвате 52 вместо всей дроби, я изменил ваше регулярное выражение здесь regex101.com/r/XpkRaI/1   -  person CyberStems    schedule 04.12.2019


Ответы (1)


Ваш код не подходит из-за лишних пробелов.

% set channel 52/80   
52/80
% regexp { ([0-9]+)\/80 } $channel match cchannel
0
% regexp {([0-9]+)\/80} $channel match cchannel
1
% set match
52/80
% set cchannel
52

Вы также не должны инвертировать результат regexp в этом случае; сценарий тела if, по-видимому, предназначен для случаев, когда шаблон соответствует...

person Donal Fellows    schedule 04.12.2019
comment
Спасибо, Донал. Я просто удалил пробелы, и это сработало! И да, также инвертирование результатов не позволяет блокировать печать, поскольку регулярное выражение возвращает 1 в случае успеха. - person Tanbir; 05.12.2019