正規表現で変数を照合する必要がある Tcl スクリプトを作成しようとしています。たとえば、ファイルには「major」を含むコード行がいくつかあります。これらすべての行から、特定の行を 1 つ特定する必要があります。
major("major",0x32)
「メジャー」に変数 p1 を使用しています ( set p1 major
)
$p1
その特定の行をキャプチャするために、変数 p1 ( ) を使用して正規表現を作成するにはどうすればよいですか?
正規表現で変数を照合する必要がある Tcl スクリプトを作成しようとしています。たとえば、ファイルには「major」を含むコード行がいくつかあります。これらすべての行から、特定の行を 1 つ特定する必要があります。
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に保存されることに注意してください。これはおそらくあなたが望むものですが、走行距離は異なる場合があります.