TCL:逻辑运算符在regexp中定义的变量中不起作用

时间:2013-10-18 00:36:45

标签: regex arrays string tcl match

我有一个字符串,我想检查数组中的任何字符串是否是其中的一部分:

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

我不想使用foreach循环是因为if语句中还有一些其他条件,并且每个都需要一个foreach循环。然后运行时间会增加很多。

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

您将其作为{($List)}传递。花括号{}表示不执行替换。所以你的正则表达式是字面意思:

($List)

这有点愚蠢,因为你试图在字符串结尾之后匹配单词“List”,根据定义它应该不再包含字符。

您想要的是将其作为"($List)"传递。双引号""表示执行替换。所以如果你这样做:

regexp "($List)" $name

你的正则表达式模式将是

(abc|efg|hij)

这可能是你想要的。