繁体   English   中英

如何在tcl中的正则表达式中匹配[]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM