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)
что, вероятно, то, что вы хотите.