我正在尝试编写一个 Tcl 脚本,我需要在其中匹配正则表达式中的变量。例如,文件有一些包含“主要”的代码行。在所有这些行中,我需要确定一个特定的行:
major("major",0x32)
我将变量 p1 用于“主要”(set p1 major
)
如何使用变量 p1 ( $p1
) 编写正则表达式来捕获该特定行?
我正在尝试编写一个 Tcl 脚本,我需要在其中匹配正则表达式中的变量。例如,文件有一些包含“主要”的代码行。在所有这些行中,我需要确定一个特定的行:
major("major",0x32)
我将变量 p1 用于“主要”(set p1 major
)
如何使用变量 p1 ( $p1
) 编写正则表达式来捕获该特定行?
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)
如果您只想知道单行是否匹配,您可以测试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 中,而不仅仅是搜索模式。这可能是您想要的,但您的里程可能会有所不同。