Tcl - 匹配glob模式中的右括号

时间:2012-06-03 16:07:26

标签: tcl glob

我如何获得switch语句来计算结束括号?我尝试了"[][]""[[\]]"

set x "]"

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

2 个答案:

答案 0 :(得分:4)

你可以使用:

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

或匹配多于括号:

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

答案 1 :(得分:2)

如果您想将]作为switch中一组字符的一部分进行匹配,那么您只有几个选项:

  1. 使用-regexp匹配代替-glob。它更复杂,需要不同的模式,但它也更灵活(特别是当涉及到这样的事情时)。

    switch -regexp $x {
        ^[][(){}]$ {
            puts "Matched!"
        }
    }
    
  2. 在身体共享中使用多个子句:

    switch -glob $x {
        {\[} - {\]} - [(){}] {
            puts "Matched!"
        }
    }
    
  3. 不能做的是将]放在一个glob匹配集中,除非作为一个范围的非初始部分(glob matcher非常愚蠢,但很快) 。没有任何合适的范围可以与您在此处完全匹配,因此单个glob不起作用。