簡體   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