Tcl字符串命令string
string
string option arg ?arg ...?
操作字符串,具体操作由option决定,option支持以下选项:
compare
string compare ?-nocase? ?-length int? string1 string2
对字符串string1和string2逐字符的进行比较。当string1小于、等于或大于string2时返回-1、0或1。如果指定了-length,则只比较string1与string2前int个字符。如果int为负数则忽略。如果指定了-nocase则比较时不区分大小写。
equal
string equal ?-nocase? ?-length int? string1 string2
对字符串string1和string2逐字符的进行比较。如果string1与string2相同则返回1,否则返回0。如果指定了-length,则只比较string1与string2前int个字符。如果int为负数则忽略。如果指定了-nocase则比较时不区分大小写。
is
string is class ?-strict? ?-failindex varName? str
如果str是指定字符类别class的有效成员,则返回1,否则返回0。如果提供了-strict选项,则对于所有类别,空字符串会返回0,否则返回1。如果指定了-failindex选项,当返回0时,str中不是类别class有效字符的索引会被保存到指定的名为varName的变量中,但有三个特例,当class为boolean、true或false时,如果返回0,varName总是被设置为0。如果string is返回1,则不设置变量varName。class的合法取值如下:
类别 | 说明 | 类别 | 说明 |
alpha | 任何Unicode字母字符。 | double | Tcl中double的任何有效形式,周围可以有空格。如果值不在double范围内,则返回0,varName将包含-1。 |
ascii | 值小于\u0080的任何字符(值在7位ascii范围内的字符)。 | list | 任何合适的列表结构,周围可以有空格。如果不是列表结构,返回0并且varName会被设置为列表解析失败的元素的索引,如果不确定则设置为-1。 |
lower | 所有Unicode字母字符都是小写的。 | boolean | 任何Tcl_GetBoolean形式的字符串。 |
upper | 所有Unicode字母字符都是大写的。 | true | 任何Tcl_GetBoolean形式值为真的字符串。 |
wordchar | 任何Unicode单词字符,即任何字母数字以及连字符。 | false | 任何Tcl_GetBoolean形式值为假的字符串。 |
alnum | 任何Unicode字母或数字字符。 | control | 任何Unicode控制字符。 |
digit | 任何Unicode数字字符,包括[0-9]范围之外的字符。 | graph | 除空格外的任何可打印的Unicode字符。 |
xdigit | 任何十六进制数字字符([0-9A-Fa-f])。 | 包括空格在内的任何可打印的Unicode字符。 | |
integer | Tcl中32位带符号整数值的任何有效字符串格式,周围可以有空格。如果值不在integer范围内,则返回0,varName会被设置为-1。 | punct | 任何Unicode标点字符。 |
wideinteger | Tcl中64位带符号整数值的任何有效字符串格式,周围可以有空格。如果值不在integer范围内,则返回0,varName会被设置为-1。 | space | 任何Unicode空白字符或蒙古元音分隔符(U+180e),但是不包含换行符(U+0085)。 |
index
string index str charIndex
返回字符串str索引charIndex处的字符。索引是从0开始递增。如果charIndex小于0或大于或等于字符串的长度,则此命令返回一个空字符串。charIndex可以是以下几种形式:
索引 | 说明 |
integer | 任何string is integer -strict。 |
end | str最后一位的索引。 |
end-N | 最后一位向前偏移N位。 |
end+N | 最后一位向后偏移N位。 |
M±N | 索引为整数M和N的和或差。M、N与加减号之间不能有空格。 |
range
string range str first last
返回str从索引first到last范围内的字符。first和last可以是string index支持的任何形式的索引。first和last取值关系见下方表格。如果不包含任何索引则返回空字符串。
first
string first searchString sourceString ?startindex?
从字符串sourceString中查找searchString。如果找到了,则返回找到的第一个searchString第一个字符在sourceString中的索引,如果未找到,则返回-1。如果指定了startindex,则从指定索引处开始查找。startindex可以是string index支持的任何形式的索引。
last
string last searchString sourceString ?lastindex?
从字符串sourceString中查找searchString。如果找到了,则返回找到最后一个searchString第一个字符在sourceString中的索引,如果未找到,则返回-1。如果指定了lastindex,则只查找lastindex及其之前的字符串。lastindex可以是string index支持的任何形式的索引。
length
string length str
返回字符串str的字符数,与存储字符串的字节数不一定相等。如果是ByteArray对象,那么会返回对象的实际字节长度。
replace
string replace str first last ?newstring?
删除str中从索引first到last的所有字符,first和last可以是string index支持的任何形式的索引。first和last取值关系见下方表格。如果提供了newstring,则会用newstring替换删除的字符。
map
string map ?-nocase? mapping str
根据字典mapping中的键值对替换str中的字符,str中包含的mapping中的键会被替换成对应的值。如果指定-nocase,则匹配键时将不考虑大小写差异。替换时按mapping中键出现的顺序进行匹配。替换只执行一次,所以替换过的字符对后面的键匹配没有影响,具体见下方示例。
tolower
string tolower str ?first? ?last?
返回一个所有字符都转换为小写形式的str字符串。如果只指定了first,则只转换索引first处的字符,如果fisrt小于0,则视为0。如果同时提供了first与last,则只转换first到last范围内的字符,first和last取值关系见下方表格。first和last可以是string index支持的任何形式的索引。
toupper
string toupper str ?first? ?last?
返回一个所有字符都转换为大写形式的str字符串。如果只指定了first,则只转换索引first处的字符,如果fisrt小于0,则视为0。如果同时提供了first与last,则只转换first到last范围内的字符,first和last取值关系见下方表格。first和last可以是string index支持的任何形式的索引。
totitle
string totitle str ?first? ?last?
返回一个所有字符都转换为其Unicode标题大小写变体形式的str字符串。如果没有标题大小写变体,则转换为大写,其余的字符串被转换成小写。如果只指定了first,则只转换索引first处的字符,如果fisrt小于0,则视为0。如果同时提供了first与last,则只转换first到last范围内的字符,first和last取值关系见下方表格。first和last可以是string index支持的任何形式的索引。
trim
string trim str ?chars?
返回一个删除了前导或尾随的包含在chars中的字符的str字符串。如果没有指定chars,则删除空格、制表符、换行符和回车符。
trimleft
string trimleft str ?chars?
返回一个删除了前导的包含在chars中的字符的str字符串。如果没有指定chars,则删除空格、制表符、换行符和回车符。
trimright
string trimright str ?chars?
返回一个删除了尾随的包含在chars中的字符的str字符串。如果没有指定chars,则删除空格、制表符、换行符和回车符。
match
string match ?-nocase? pattern str
查看字符串str与模式pattern是否匹配,如果提供了nocase选项,则在匹配时不区分大小写。如果匹配返回1,否则返回0。如果pattern中不包含特殊字符,则需要与str完全匹配。在需要匹配特殊字符或者使用[]分组时,此命令易用性较差,会出现一些期望之外的结果。pattern支持以下特殊字符:
字符 | 说明 |
* | 匹配字符串中的任何字符序列,包括空字符串。 |
? | 匹配字符串中的任何单个字符。 |
[] | 匹配[]中给出的任何字符。如果出现如x-y形式的字符,那么x和y之间的任何字符都将匹配 |
\ | 转义字符,将其后的一个字符按普通字符处理。用于转义特殊的模式字符串*?[]\-。 |
repeat
string repeat str count
返回重复count次str的字符串。
reverse
string reverse str
返回与str字符顺序相反的字符串。
bytelength
string bytelength str
已过时的方法,返回字符串在内存中的字节数。
wordstart
string wordstart str charIndex
已过时的方法,返回字符串str中包含charIndex处索引字符的单词的首个字符的索引。任何连续的字符数字或者下划线,或者除此之外的单个字符都被视为一个单词。
wordend
string wordend str charIndex
已过时的方法,返回字符串str中包含charIndex处索引字符的单词的下一个单词的首个字符的索引。任何连续的字符数字或者下划线,或者除此之外的单个字符都被视为一个单词。
索引取值
起始first | 结束last | 说明(length为字符串长度) |
first<0 | last<0 | 不包含任何索引。 |
fisrt<0 | last>=0 | 索引范围[0,min(last,length-1)]。 |
fisrt>0 | first>last | 不包含任何索引。 |
fisrt>0 | fisrt<=last | 索引范围[fisrt,min(last,length-1)]。 |
fisrt>=length | 不包含任何索引。 |
简单示例
set str1 abcdef
set str2 abddef
string compare -length 2 $str1 $str2
string equal -length 2 $str1 $str2
string is alpha \u0061
string is ascii 。
string is lower abc
string is upper ABC
string is wordchar abc_123
string is alnum abc1
string is alnum \u0021
string is digit \u0030
string is digit 123
string is xdigit 00a1
string is integer \u0030\u0031\u0032
string is integer ' 123 '
string is wideinteger 1234567890987654321
string is double \u0030.\u0032
string is double 1.2e-10
string is list {a b c d {e f}}
string is boolean on
string is boolean 1
string is true on
string is false false
string is control \t
string is graph ^
string is graph \u00a1
string is print ' '
string is punct \u00a1
string is space \u180e
string index $str1 end
string index $str1 end+-1
string index $str1 end-1
string index $str1 1+2
string index $str1 2
string range $str1 -1 -2
string range $str1 -1 2
string range $str1 -1 10
string range $str1 3 2
string range $str1 3 4
string range $str1 3 10
string first b $str1
string first b $str1 2
string last c $str1
string last c $str1 1
string length $str1
string replace $str1 -1 -2
string replace $str1 -1 2 ABC
string replace $str1 -1 10 a
string replace $str1 3 2
string replace $str1 3 4
string replace $str1 3 10
string map {abc 1 ab 2 a 3 } abcaababc
string map { ab 2 a 3 abc 1} abcaababc
set lowwer abcde
set upper ABCDE
string tolower $upper 1 3
string tolower $upper
string tolower $upper -1
string tolower $upper 5
string toupper $lowwer 1 3
string toupper $lowwer
string toupper $lowwer -1
string toupper $lowwer 5
string totitle $upper 1 3
string totitle $upper
string totitle $upper -1
string totitle $upper 5
set trimming ' abcde '
string trim $trimming
string trim $trimming 'ade '
string trimlef $trimming
string trimlef $trimming 'aed '
string trimright $trimming
string trimright $trimming 'aed '
string match abc abc
string match a* abc
string match a?c abbc
string match {[a-z]?[0-9]*} 'a 10'
string repeat abc 3
string reverse abc
string bytelength 字节长度
set words 'hello world'
string wordstart $words 3
string wordstart $words 5
string wordstart $words 7
string wordend $words 3
string wordend $words 5
string wordend $words 7