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