2012-06-03 3 views
1

닫는 대괄호를 계산하려면 switch 문을 어떻게 얻을 수 있습니까?Tcl - 대괄호 패턴의 닫는 대괄호 일치

set x "]"; 
switch -glob $x { 
    \] { 
     puts "MATCH ]" 
    } 
} 

또는 브래킷 이상 일치 : 나는 당신이 사용할 수있는 두 "[][]""[[\]]"

set x "]" 

switch -glob $x { 
    "[[\]]" { 
     puts "MATCH ]" 
    } 
} 

답변

2

문자가 switch 인 경우 몇 가지 옵션 만 있습니다.

  1. -glob 대신 일치하는 -regexp을 사용하십시오. 더 복잡하고 다른 패턴이 필요하지만 확실히 유연합니다 (특히 이와 같은 경우).

    switch -regexp $x { 
        ^[][(){}]$ { 
         puts "Matched!" 
        } 
    } 
    
  2. 를 사용하여 신체 공유 여러 조항 : 당신이 이의 비 - 처음 부분 제외 설정 글로브 경기에 ]을 넣어하지 수있는 일

    switch -glob $x { 
        {\[} - {\]} - [(){}] { 
         puts "Matched!" 
        } 
    } 
    

범위 (glob 매처는 꽤 바보이지만 빠름). 여기에있는 것과 정확히 일치하는 적절한 범위가 없으므로 단일 glob가 작동하지 않습니다.

+0

이것은 Noxx의 _otherwise great_ 답변에 대한 귀하의 의견에 기초하고 있습니다 (작업 한 경우) : '[() [] {}]' –

4

을 시도 당신이 그룹의 일부로 ]을 일치시킬

set x "foo]bar"; 
switch -glob $x { 
    *\]* { 
     puts "MATCH ]" 
    } 
} 
+0

또,']'문자가 작동합니다 (이것은 _list_로 해석됩니다).'{]}'도 마찬가지입니다. globbing은 오직'(')'이'(이스케이프 처리되지 않은)'['다음에있을 때만 특별하다고 취급합니다. –

+0

몇 가지 옵션 중 하나가 필요합니다. 내 전체 프로그램에는 작동하지 않는 것을 제외하고는이 [ "[] [] {}]"'과 같은 것이 있습니다. 그러나 당신의 예는 브래킷과 일치 할뿐입니다. – baruch

+0

@baruch 그게 중요한 포인트 야! –