2013-01-07 30 views
0

在TCL中,我已經聲明瞭一些帶有某些模式的數組sstr,並且希望將這些模式與cryplist進行匹配。如果我找到了匹配項,我將顯示數組鍵和匹配的列表成員。但下面的程序不起作用。希望我在正則表達式的聲明中犯了一些錯誤。TCL中的正則表達式問題,用於檢查

#!/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 
     } 
    } 
} 

回答

1

的問題是,你使用regexp {$str} $i,這使得正則表達式是str變量的字面$str,而不是內容。更改爲regexp -- $str $i,它應該工作; --表示「沒有更多的選項」(僅僅爲了安全)和未引用的$str從該變量的讀取(您想要的)中讀取。

+0

仍然沒有得到正確的答案------------- $:adzctg-cm20decadt/sr -------------- ms - > d | t | [az] {6} ============= ms - > $:adzctg-cm20decadt/sr ================ ------------- $:yyzpty-cm23febadt/sr -------------- ms - > d | t | [az] {6} = ============ ms - > $:yyzpty-cm23febadt/sr ================ ----------- - dc * aed1740.0 * gbp -------------- ms - > d | t | [az] {6} – Tamilan

+0

@Tamilan爲什麼這不是正確答案?你能指出你沒有料到的部分,並解釋你爲什麼沒有期待嗎? – potrzebie