Tcl中不区分大小写的比较

时间:2014-04-04 17:00:21

标签: tcl

我在TCL中有代码:

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || $c == "Start") } {
    puts Works
}

我想让$c == "Start"检查不区分大小写的Start。我该怎么办?

1 个答案:

答案 0 :(得分:6)

您可以使用string compare

string compare ?-nocase? ?-length int? string1 string2
     

对字符串string1string2执行逐个字符的比较。返回-101,具体取决于string1是否按字典顺序小于,等于或大于string2。如果指定了-length,则在比较中仅使用第一个长度字符。如果-length为负数,则会被忽略。如果指定了-nocase,则以不区分大小写的方式比较字符串。

因此,如果它返回0,则$c完全等于String

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string compare -nocase $c "Start"] == 0) } {
    puts Works
}

-nocase开关确保它使用不区分大小写的比较,如文档所述。


另一种方法是将$c置于统一的案例中,并将Start与统一案例一起使用。例如,您可以将所有内容转换为小写:

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string tolower $c] == "start") } {
    puts Works
}

或大写......

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string toupper $c] == "START") } {
    puts Works
}

另一种选择可能是regexp,如果你不介意探索'那个地区。

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [regexp -nocase -- {^Start$} $c]) } {
    puts Works
}

regexp返回1表示匹配,0表示不匹配。 ^$确保整个Start$c变量匹配。结论,如果$cStart相同,则会获得1