在TCL中,我已经声明了一个带有一些模式的数组sstr,我想将这些模式与加密列表相匹配。如果我找到匹配,我将显示数组键和匹配的列表成员。但是下面的程序没有用。希望我在正则表达式的声明中犯了一些错误。
#!/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
}
}
}
答案 0 :(得分:1)
问题是你正在使用regexp {$str} $i
,这使得正则表达式成为 literal $str
而不是str
变量的内容。更改为regexp -- $str $i
,它应该有效; --
说“没有其他选项”(仅用于安全),而不带引号的$str
从该参数的变量中读取(你想要的)。