Tcl regexp:変数に数値が含まれているかどうかを確認するには?

Tcl regexp:変数に数値が含まれているかどうかを確認するには?

以下は、変数に0から9の数字があることを確認するtclスクリプトです。

    set a "abc"

    if {[ regexp {[0-9]*} $a ]} {
       puts "Found number in $a"
    } else {
       puts "Doesn't find number in $a"
    }

ただし、実行すると「Abcで見つかった番号」と報告されます。

答え1

使用した正規表現は「ゼロ個以上の数値マッチング」を意味するためです。この文字列はabcゼロの数字と一致するため、肯定的な結果が得られます。*(「0以上」)のみを削除すると、期待どおりに機能します。

set a "a2bc"

if {[ regexp {[0-9]} $a ]} {
        puts "Found number in $a"
} else {
        puts "Doesn't find number in $a"
}

答え2

正規表現では、*「以前に指定された文字またはクラスが0個以上」を意味します。したがって、数字が0個以上の文字列を探しています。これはすべてと一致します。

答え3

正規表現を使用せずに、globスタイルのパターンを使用してこの問題を解決することもできます。

if {[string match {*[0-9]*} $a]} { ...

バラよりstring match文書。

関連情報