Tcl regexp:如何检查变量是否包含数字?

Tcl regexp:如何检查变量是否包含数字?

下面是我的 tcl 脚本,用于检查变量中是否存在 0-9 数字。

    set a "abc"

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

但是当我运行它时,它报告“在 abc 中找到数字”。

答案1

那是因为您使用的正则表达式表示“匹配 0 个或多个数字”。该字符串abc与 0 个数字匹配,因此您会得到正结果。只需删除*(“0 或更多”),它应该按预期工作:

set a "a2bc"

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

答案2

在正则表达式中,*表示“零个或多个先前指定的字符或类”。因此,您正在寻找具有零个或多个数字字符的任何字符串。这与一切相匹配。

答案3

您也可以使用 glob 样式模式来解决此问题,而无需使用正则表达式的功能:

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

string match文档。

相关内容