[英]how to match [ ] in regexp in tcl
我已经尝试过以下内容,但无法正常工作
set line "set_load 10 serdes[10]"
if {[regexp {.\ [ . \ ]} $line } {
puts "Find [] in line "
} else {
}
您实际上并不需要regexp来执行此操作,例如,可以先使用string first
:
set line {set_load 10 serdes[10]}
if {[string first {[} $line] > -1 && [string first {]} $line] > -1} {
puts {Found [] in line}
}
将Found [] in line
打印Found [] in line
如果您坚持使用正则表达式,那么我猜您可以使用如下所示的内容:
set line {set_load 10 serdes[10]}
if {[regexp {\[.*\]} $line]} {
puts {Found [] in line}
}
请注意,在第一种方法中, [
和]
的顺序被忽略,但是可以通过获取字符串中匹配项的索引来轻松断言。 在第二种方法中, [
和]
的顺序必须一个接一个。 可以忽略顺序,但这会使表达式稍微复杂一些。
由于方括号是Tcl的命令替换语法,因此您不能将方括号放在未转义的双引号中。
% set line "set_load 10 serdes[10]"
invalid command name "10"
您需要转义它们或使用不允许在其中替换命令的括号:
% set line "set_load 10 serdes\[10]"
set_load 10 serdes[10]
% set line {set_load 10 serdes[10]}
set_load 10 serdes[10]
此输出来自交互式tclsh
会话。
有关Tcl语法的完整文档(仅12条规则),请参见https://www.tcl.tk/man/tcl8.6/TclCmd/Tcl.htm 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.