TCL: логический оператор не работает в переменной, определенной в регулярном выражении

У меня есть строка, я хочу проверить, является ли какая-либо строка из массива его частью:

set name abcxyz
set array [list abc efg hij]
set List [join $array "|"]
if {[regexp {($List)} $name]} {
    ...
} 

Я не хочу использовать цикл foreach, потому что в операторе if есть некоторые другие условия, и для каждого из них потребуется цикл foreach. Тогда время выполнения сильно увеличится.

Любая помощь приветствуется!

1 ответ

Вы передаете это как {($List)}, Фигурные скобки {} значит не выполнять подмену. Итак, ваш шаблон регулярных выражений буквально:

($List)

что довольно глупо, так как вы пытаетесь сопоставить слово "список" после конца строки, который по определению не должен содержать больше символов.

Вместо этого вы хотите передать это как "($List)", Двойные кавычки "" значит выполнить замену. Так что если вы делаете:

regexp "($List)" $name

ваш шаблон регулярного выражения будет

(abc|efg|hij)

что, вероятно, то, что вы хотите.

Другие вопросы по тегам