Tcl-匹配全局模式中的结束括号
如何获得Tcl-匹配全局模式中的结束括号,tcl,glob,Tcl,Glob,如何获得switch语句来计算结束括号?我尝试了“[]]”和“[[\]]” 您可以使用: set x "]"; switch -glob $x { \] { puts "MATCH ]" } } 或要匹配多个括号,请执行以下操作: set x "foo]bar"; switch -glob $x { *\]* { puts "MATCH ]" } } 当您想将]作为开关中一组字符的一部分进行匹配时,您只有几个选项: 使用-reg
switch
语句来计算结束括号?我尝试了“[]]”
和“[[\]]”
您可以使用:
set x "]";
switch -glob $x {
\] {
puts "MATCH ]"
}
}
或要匹配多个括号,请执行以下操作:
set x "foo]bar";
switch -glob $x {
*\]* {
puts "MATCH ]"
}
}
当您想将
]
作为开关
中一组字符的一部分进行匹配时,您只有几个选项:
-regexp
匹配,而不是-glob
。它更复杂,需要不同的模式,但它肯定更灵活(特别是在这样的事情上)
switch -glob $x {
{\[} - {\]} - [(){}] {
puts "Matched!"
}
}
您不能做的是将
]
放在全局匹配集中,除非作为范围的非初始部分(全局匹配器非常愚蠢,但速度很快)。没有任何合适的范围可以完全匹配您在这里所要查找的内容,因此单个glob将不起作用。此外,一个literal]
也可以起作用(这在解析为列表的内容中),而{]}
也是如此。Globbing只将]
视为特殊的,当它跟在一个(未scaped的)[
之后时。我需要它作为几个选项之一。我的完整程序有如下内容“[()[]{}”
,当然这不起作用。但是你的例子将只匹配括号,其他什么都不匹配。@DonalFollows,这从问题中可以明显看出。在问题中,我试图匹配开始括号和结束括号。这都是基于你对Noxx的另一个很好的答案的评论,你在匹配这个答案(如果它起作用的话):[()[]{}]
switch -regexp $x {
^[][(){}]$ {
puts "Matched!"
}
}
switch -glob $x {
{\[} - {\]} - [(){}] {
puts "Matched!"
}
}