2017-06-29 13 views
0

文字列のリストをループしている間に変数を正規表現に渡そうとしています。たとえば、私は top/inst/name[i]の文字列を持っています。ここで、iは異なる値の整数をとることができます。Tclの正規表現で変数にコマンドを渡す

for {set i 0} {$i < $rows} {set i [expr {$i + 1}]} { 
    my_command { top/inst/name[$i] top_o/inst_o/name[$i] } 
} 

$iを数字として扱うように正規表現パーサーに通知するにはどうすればよいですか? $iがコマンドであると不平を言う。

答えて

2

[ ... ]は、ここではコマンド置換構文としてベースTclに、文字セット構文として正規表現用に2つの異なる目的で使用されます。私はあなたがのいずれかの実際の名前の一部であるように見えるので、この時点でのいずれかが欲しいと確信していません。だからあなたは注意する必要があります。

あなたは []\文字を挿入するか、コマンド置換を回避するために、またはあなたが substの拡張機能を使用することができます、他の問題を回避するには

my_command [subst -nocommands { top/inst/name[$i] top_o/inst_o/name[$i] }] 

をすることができますいずれかのインサートmoreバックスラッシュ(これはしばらくすると醜いことに注意してください)、正規表現を実際にリテラル(サブ)文字列にマッチさせる場合は、正規表現の前に接頭辞***=を付けることができます。


forループ反復句でincr i代わりにset i [expr {$i + 1}]を使用することが慣用的です。それは同じことをしますが、(人間の)読者にとっては、より短く、より明確です。 CまたはC++(または他の多くの言語)でi = i + 1の代わりに++iを使用するのと同じです。

+0

ありがとうDonal!それが私の問題を解決しました! –