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

时间:2018-11-03 19:16:23

标签: regex tcl

我已经尝试过以下方法,但无法工作

.avatar {
    vertical-align: middle;
    width: 20px;
    height: 20px;
    border-radius: 50%;
}

<img src="https://connectoricons-prod.azureedge.net/kusto/icon_1.0.1027.1210.png" alt="Avatar" class="avatar">

2 个答案:

答案 0 :(得分:0)

您实际上并不需要正则表达式,可以使用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

如果您坚持使用正则表达式,那么我想您可以使用类似这样的东西:

set line {set_load 10 serdes[10]}

if {[regexp {\[.*\]} $line]} {
   puts {Found [] in line}
}

请注意,在第一种方法中,[]的顺序被忽略,但是可以通过获取字符串中匹配项的索引来轻松断言。在第二种方法中,[]的顺序必须一个接一个。可以忽略顺序,但这会使表达式稍微复杂一些。

答案 1 :(得分:0)

由于括号是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