0

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

1 に答える 1

1

問題はregexp {$str} $i、正規表現を変数の内容ではなくリテラルにする を使用していることです。 に変更すると、動作するはずです。「これ以上のオプションはありません」(安全のため)と表示され、引用符で囲まれていない引数は変数から読み取られます(必要なもの)。$strstrregexp -- $str $i--$str

于 2013-01-07T11:13:48.923 に答える