我正在尝试编写一个Tcl脚本,我需要在其中匹配正则表达式中的变量。 例如,file包含一些包含'major'的代码行。在所有这些行中,我需要确定一个特定的行:
major("major",0x32)
我使用变量p1代表'major'(set p1 major
)
如何使用变量p1($p1
)编写正则表达式来捕获该特定行?
答案 0 :(得分:2)
regexp -- "$p1\\(\"$p1\",0x32\\)" $line match
在tclsh:
% set line {major("major",0x32)}
major("major",0x32)
% set p1 major
major
% regexp -- "$p1\\(\"$p1\",0x32\\)" $line match
1
% puts $match
major("major",0x32)
答案 1 :(得分:1)
如果您只是想知道单行是否匹配,则可以测试string match
而不是正则表达式。这通常更快,更不挑剔。例如:
set fh [open /tmp/foo]
set lines [read $fh]
close $fh
set p1 major
set lines [split $lines "\n"]
foreach line $lines {
if {[string match *$p1* $line]} {set match $line}
}
puts $match
请注意,这会将整行保存在 match 中,而不仅仅是搜索模式。这可能是你想要的,但你的里程可能会有所不同。