2

私は初心者ですが、tclスクリプトを機能させるのに問題があります。オンラインで検索しましたが、何が間違っているのか理解できないようです。これが私が書いたものです:

set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
    if { [regexp {\w\d\d} $list match ] } {
        puts $match
    }
}

これが私が得る出力です:

f01
f01
f01
f01
f01
f01

しかし、これは私が望んでいて、期待していることです:

f01
f01
f02
m01
m01
f02

私が期待したものを手に入れるためのアドバイスはありますか?

よろしくお願いします!

4

2 に答える 2

4

コードスニペットは実際のコードと一致していないようです$stringが、と同じものが$listあると思います。つまり、各アイテムではなく、元の文字列で正規表現を繰り返し実行しているということです。さらに、正規表現が間違っていました。以下が機能するはずです。

set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
    if { [regexp {\w\d+} $item match ] } {
        puts $match
    }
}

ここでの注目すべき違いは、正規表現を修正する以外に、$itemではなくで実行されていること$listです。

于 2013-03-18T23:05:11.277 に答える
0

[regexp {\ w \ d \ d} $ list match]は、指定されたリストで指定されたREの最初の出現を検索しようとします。

代わりに、これを行う必要があります。

[regexp {\ w \ d \ d} $ item match]は、各アイテムをチェックし、REが一致するかどうかを出力します。

于 2013-04-18T11:24:51.613 に答える