我想查找某個文件中是否存在If塊。Tcl [regexp]:表達式匹配,如果塊內有變量
我有一個文件new.tcl如下:
if { [info exists var1] } {
if { "$var1" == "val1" } {
puts "var1 has value as val1"
}
} else {
puts "var1 does not exists"
}
我讀在另一個Tcl的功能此文件並試圖以匹配通過如果功能regexp
和值以及變量塊此功能所用是變量。
我實現文件的樣子,
set valueDict [list 'var1' 'val1']
set valDictLen [llength $valueDict]
set myFilePtr [open "new.tcl" "r"]
set myFileContent [read $myFilePtr]
close $myFilePtr
for { set index 0 } { $index < $valDictLen } { incr index 2 } {
set currVar [lindex $valueDict $index]
set currVal [lindex $valueDict [expr $index + 1]]
# I actually want to match the entire if block content here
if { ![regexp "if \{ \[info exists $currVal\] \}" $myFileContent] } {
puts "Code not present"
}
}
如果代碼格式很好,你可以使用正則表達式,如[\(?:\ n | ^)\ s *?{\ s *?\ [info exists var1 \ s *?] \ s *? } \ S * {* \ n}(?:??\ N | $)'](https://regex101.com/r/PUpBvb/1)(未在Tcl中測試過),但我懷疑它在任何情況下都能正常工作。用正則表達式解析代碼通常是一個壞主意。 –
請注意我想在正則表達式中使用變量'$ currVal'而不是'var1'直接使用 – Ashwin
看看這個答案並告訴我它是否解決了你的問題:http://stackoverflow.com/questions/14237376 /如何使用正則表達式匹配一個圓括號在TCL – user2141046