0

正規表現で変数を照合する必要がある Tcl スクリプトを作成しようとしています。たとえば、ファイルには「major」を含むコード行がいくつかあります。これらすべての行から、特定の行を 1 つ特定する必要があります。

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 に答える