0

在 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
        }
    }
}
4

1 回答 1

1

问题是您正在使用regexp {$str} $i,这使得正则表达式成为文字 $str而不是str变量的内容。更改为regexp -- $str $i它应该可以工作;表示“没有进一步的--选择”(只是为了安全),未引用$str的从变量中读取该参数(你想要的)。

于 2013-01-07T11:13:48.923 回答