2012-06-22 78 views
0

我有下面這段代碼TCL:TCL,正則表達式的功能和if語句

#wrong format: 
    set in_val "12 0 2 0 0 0 1 0 3 698" 
    #correct format: 
    #set in_val "12 0 1 0 0 0 1 0 3 698" 
    set val_ok [regexp {(\d+)\s([01]\s)([01]\s)([01]\s)([01]\s)([01]\s)([01]\s)([01]\s)(\d+)\s(\d+).*} $in_val Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11] 
    if {$val_ok==1} { 
     # correct format 
     puts "Correct format, continuing..." 
     puts "$Var2 $Var3 $Var4 $Var5 $Var6 $Var7 $Var8 $Var9 $Var10 $Var11" 
    } else { 
     # wrong format 
     puts "Wrong format, stimulus [$in_val]" 
    } 

我要檢查是否與正則表達式的功能描述的格式是正確的。 當in_val var具有正確的格式時,一切正常,if塊被執行。 然而,當格式是錯誤的,而不是進入else塊,我得到以下錯誤:

invalid command name "12 0 2 0 0 0 1 0 3 698" 
    while executing 
"$in_val" 
    invoked from within 
"if {$val_ok==1} { 
# correct format 
puts "Correct format, continuing..." 
puts "$Var2 $Var3 $Var4 $Var5 $Var6 $Var7 $Var8 $Var9 $Var10 $Var11" 

} else {..." 
    (file "xxx.tcl" line 3) 

我使用的ActiveState ActiveTcl 8.5.11.1爲Windows。 有關val_ok = 0和正則表達式不匹配時出現錯誤原因的任何想法? 謝謝!

Ĵ-B

回答

5

這是因爲你想執行$in_val

puts "Wrong format, stimulus [$in_val]" 
           ^
           | 
       you are trying to execute $in_val here 

看到方括號?刪除它們將阻止錯誤:

puts "Wrong format, stimulus : $in_val" 

如果仍然要打印的方括號,那麼你可以反斜槓轉義它們:

puts "Wrong format, stimulus \[$in_val\]" 
+0

事實上,你是對的。 我知道這樣寫是沒有意義的,但我不認爲這是我錯誤的起源,因爲它沒有在錯誤中說明。 謝謝,無論如何! – feronjb