2

How would I get the switch statement to math the closing bracket? I tried both "[][]" and "[[\]]"

set x "]"

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

2 に答える 2

5

あなたが使用することができます:

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

またはブラケット以上に一致するには:

set x "foo]bar";
switch -glob $x {
    *\]* {
        puts "MATCH ]"
    }
}
于 2012-06-03T16:23:35.883 に答える
3

]の文字グループの一部として一致させたい場合switch、いくつかのオプションしかありません。

  1. -regexpの代わりにマッチングを使用し-globます。より複雑で、別のパターンが必要ですが、より柔軟でもあります (特にこのような場合)。

    switch -regexp $x {
        ^[][(){}]$ {
            puts "Matched!"
        }
    }
    
  2. 本文を共有する複数の句を使用します。

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

できない]ことは、範囲の先頭以外の部分を除いて、a をグロブ マッチ セットに入れることです (グロブ マッチャはかなりばかげていますが、高速です)。ここで求めているものと正確に一致する適切な範囲はないため、単一のグロブは機能しません。

于 2012-06-04T07:30:37.657 に答える