
以下は、変数に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
文書。