2012-06-22 3 views
0

경우 I TCL 코드의 다음과 같은 부분이 있습니다TCL, 정규 표현식 기능과 문

#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 블록이 실행됩니다. 나는 창문은 ActiveState ActiveTcl 8.5.11.1를 사용하고

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) 

: 형식은, 대신 다른 블록을 입력하는 잘못된 경우 그러나, 나는 다음과 같은 오류가 발생합니다. val_ok = 0이고 정규식이 일치하지 않을 때 오류가 나타나는 이유는 무엇입니까? 감사합니다.

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

는 대괄호를 참조하십시오

J-B는

답변

5

그것은 당신이 $in_val을 실행하기 위해 노력하고 있기 때문입니까?

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

사실, 당신이 맞다 : 당신은 아직도 당신이 그들을 탈출 백 슬래시 수있는 대괄호를 인쇄하려면

puts "Wrong format, stimulus : $in_val" 

: 그들을 제거하면 오류를 방지한다. 그런 식으로 쓰는 것이 진짜 의미가 없다는 것을 알았지 만 실수로 언급되지 않았기 때문에 그것이 내 오류의 기원이라고 생각하지 않았습니다. 감사합니다. 어쨌든! – feronjb