如何匹配正则表达式中的变量?

时间:2012-07-11 15:25:40

标签: tcl

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

major("major",0x32)

我使用变量p1代表'major'(set p1 major

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

2 个答案:

答案 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 中,而不仅仅是搜索模式。这可能是你想要的,但你的里程可能会有所不同。