Tcl中不区分大小写的比较
我在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,则在比较中仅使用第一个长
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
}