TCL中用于检查的正则表达式问题

TCL中用于检查的正则表达式问题,tcl,Tcl,在TCL中,我已经声明了一个带有一些模式的数组sstr,我想将该模式与cryplist匹配。如果我找到了匹配项,我将显示数组键和匹配的列表成员。但下面的程序不起作用。希望我在正则表达式的声明中犯了一些错误 #!/bin/tclsh set cryplist [list "$:adzctg-cm20decadt/sr" "$:yyzpty-cm23febadt/sr" "dc*aed1740.0*gbp" "dc*ars1*usd" "dc*gbp10.00*/r" "d|t|lbb/den" "

在TCL中,我已经声明了一个带有一些模式的数组sstr,我想将该模式与cryplist匹配。如果我找到了匹配项,我将显示数组键和匹配的列表成员。但下面的程序不起作用。希望我在正则表达式的声明中犯了一些错误

#!/bin/tclsh
set cryplist [list "$:adzctg-cm20decadt/sr" "$:yyzpty-cm23febadt/sr" "dc*aed1740.0*gbp" "dc*ars1*usd" "dc*gbp10.00*/r" "d|t|lbb/den" "d|t|ordphx"]
array set sstr {
    z "dc*[a-z]{3}*"
    dl "d\$*[0-9]"
    fd "\$:[a-z]{6}"
    md "d|t|[a-z]{3}\/[a-z]{3}"
    ms "d|t|[a-z]{6}"
}

foreach i $cryplist {
    puts "------------- $i --------------"
    foreach {n str} [array get sstr] {
        puts "$n -> $str"
        if { [regexp {$str} $i ] } {
            puts "============= $n -> $i ================"
            break
        }
    }
}

问题是您使用的是
regexp{$str}$i
,这使得正则表达式是文本
$str
,而不是
str
变量的内容。更改为
regexp--$str$i
,它应该可以工作;
--
表示“无其他选项”(仅出于安全考虑),未加引号的
$str
从该参数的变量中读取(您想要的)。

仍然没有得到正确的答案..---------------------$:第二代(a-z)7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 t|[a-z]{6}@泰米兰为什么这不是正确的答案?你能指出你没有预料到的部分,并解释为什么你没有预料到它吗?