Tcl中不区分大小写的比较

Tcl中不区分大小写的比较,tcl,Tcl,我在TCL中有代码: set a 1 set b 0 set c "Start" if { $a == 1 && ($b == 1 || $c == "Start") } { puts Works } 我想让$c==“Start”检查是否区分大小写Start。我怎么做?您可以使用: 对字符串string1和string2执行逐字符比较。返回-1、0或1,具体取决于string1在字典上是否小于、等于或大于string2。如果指定了-length,则在比较中仅使用第一个长

我在TCL中有代码:

set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || $c == "Start") } {
    puts Works
}
我想让
$c==“Start”
检查是否区分大小写
Start
。我怎么做?

您可以使用:

对字符串
string1
string2
执行逐字符比较。返回
-1
0
1
,具体取决于
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
设置为统一的大小写,并将
开始
也设置为统一的大小写。例如,您可以将所有内容转换为小写:

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
^
$
确保整个
开始
$c
变量匹配。结论,如果
$c
开始
相同,您将得到
1

对不起。我想我解释得不对。我想我需要$c==“Start”为真,如果$c等于Start,Start,Start,Start等,那么“Start”在任何情况下都可以为$c==“Start”条件为真。非常感谢。很好的解释。这两个例子都很好:)如果我们用尽了所有的可能性:
regexp{(?i)^start$}$c
string equals-nocase
也值得一提。要扩展@donalvellows的注释:子命令是
equal
,而不是
equals
。如
中的{[string equal-nocase$c“Start”]}{…}
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [regexp -nocase -- {^Start$} $c]) } {
    puts Works
}