在Tcl中匹配字符串的第一个字母

时间:2014-08-06 03:35:45

标签: string tcl match

我想将字符串的第一个字母与已知字符进行比较。例如,我想检查字符串"示例"的第一个字母是否与" e"匹配。或不。我确定必须有一种非常简单的方法,但我找不到它。

4 个答案:

答案 0 :(得分:3)

一种方法是使用string index获取第一个字符:

if {[string index $yourstring 0] eq "e"} {
    ...

答案 1 :(得分:1)

我认为在一个答案中收集不同的方法是个好主意。

假设

set mystring example
set mychar   e

目标是测试$mystring中的第一个字符是否等于$mychar

我的建议是(略有编辑):

if {[string match $mychar* $mystring]} {
    ...

此调用执行全局样式匹配,将$mystring与字符$mychar进行比较,后跟零个或多个任意字符的序列。由于算法中的快捷方式,比较在第一个字符后停止并且非常有效。

Donal Fellows:

if {[string index $mystring 0] eq $mychar} {
    ...

此调用专门比较由$mystring中的第一个字符和字符串$mychar组成的字符串。它使用高效的eq运算符而不是==运算符,这是旧版本Tcl中唯一可用的运算符。

构建由$mystring中的第一个字符组成的字符串的另一种方法是调用string range $mystring 0 0

Mark Kadlec:

if {[string first $mychar $mystring] == 0 }
    ...

此调用在字符串$mystring中搜索字符$mychar的第一个匹配项。如果找到,则返回找到字符的索引。然后将该索引号与0进行比较。如果它们相等,则$mystring的第一个字符为$mychar

在最坏的情况下,此解决方案效率很低,其中$mystring很长且$mychar不会出现。然后该命令将检查整个字符串,即使只有第一个字符是感兴趣的。

另一个基于string的解决方案:

if {[string compare -length 1 $mychar $mystring] == 0} {
    ...

此调用比较两个字符串的第一个 n 字符(此处 n 被硬编码为1):如果存在差异,则命令将返回-1或1(取决于字母顺序),如果它们相等,则返回0。

另一种解决方案是使用正则表达式匹配:

if {[regexp -- ^$mychar.* $mystring]} {
    ...

此解决方案类似于上面的string match解决方案,但使用正则表达式语法而不是glob语法。不要忘记^锚点,否则如果$mychar$mystring出现{{1}},则调用将返回true。

文档:eq and ==regexpstring

答案 2 :(得分:0)

if { [string first e $yourString] == 0 }
  ...

答案 3 :(得分:0)

set mychar "e"
if { [string first $mychar $myString] == 0}{
  ....