0

我正在尝试编写一个 Tcl 脚本,我需要在其中匹配正则表达式中的变量。例如,文件有一些包含“主要”的代码行。在所有这些行中,我需要确定一个特定的行:

major("major",0x32)

我将变量 p1 用于“主要”(set p1 major

如何使用变量 p1 ( $p1) 编写正则表达式来捕获该特定行?

4

2 回答 2

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)
于 2012-07-11T15:41:18.463 回答
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 中,而不仅仅是搜索模式。这可能是您想要的,但您的里程可能会有所不同。

于 2012-07-14T21:53:55.583 回答