您的位置:首页 > 其它

tcl/tk实例详解——string(三)

2008-04-30 17:00 567 查看
这里对string命令中的几个子命令使用实例进行一些解释,以便于更加容易理解string命令中的各个子命令,本文仅对三个比较复杂的命令进行实例解析。分别是is class、map和match三个子命令。

string is class ?-strict? ?-failindex varname? string
如果string是指定class中的成员就返回1,否则返回0。如果指定了-strict,空字符串就返回0,不指定则返回1。如果指定了-failindex,那么将导致不匹配的索引储存在varname中,如果返回1则varname不会被赋值。列举了以下字符类:
判断字符串是否由字母和数字组成使用alnum:
% string is alnum "abc123"
1
判断字符是否是由字母组成使用alpha:
% string is alpha "abc"
1
任何ASCII码ascii:
% string is ascii "^%*ajb1723"
1
布尔变量boolean:
% string is boolean 1
1
% string is boolean true
1
在tcl8.5.1中使用这个命令,会有一点点问题,如果字符串为t、tr、tru或者f、fa、fal、fals都为真,非常奇怪的现象。
是否是控制符号control:ASCII码中从0到37都会返回1
% string is control "/34"
1
任何数字字符digit:
% string is digit "34"
1
任何浮点字数double:需要注意可以带符号,但是类如.89和89.都被认为是double
% string is double "11.2"
1
1或者false:(很奇怪,f、fa、fal、fals也会返回1)
% string is false 0
1
打印字符,除了空格符:
% string is graph "HelloWorld!"
1
% string is graph "Hello World!"
0
32位有效整数:(超过32位就返回0)
% string is integer "123231232"
1
合法列表结构list:
% string is list "1 32 3"
1
小写字母lower:
% string is lower "abd"
1
任何打印字符print:与graph区别就是包含了空格符
% string is print "a b c"
1
任何标点符号punct:
% string is punct ",:"
1
空格符、制表符、换行符、回车、垂直制表符、退格符space:
% string is space "/t "
1
是否为真true:(包括1、true、t、tr、tru)
% string is true 1
1
任何大写字母upper:
% string is upper "HE"
1
长整数wideinteger:
% string is wideinteger "1234567890123456789"
1
% string is integer "1234567890123456789"
0
任何字母、数字和下划线wordchar:
% string is wordchar "Hi_Hi"
1
任何16位进制字符([0-9][A-F][a-f])xdigit:
% string is xdigit "0123456789abcdefABCDEF"
1
如果指定了-strict,空字符串就返回0,不指定则返回1。
% string is integer ""
1
% string is integer -strict ""
0
如果指定了-failindex,那么将导致不匹配的索引储存在varname中,如果返回1则varname不会被赋值。在boolean、true和false的情况下,如果返回0,varname将被置为0。
% string is integer -failindex myIndex "1234abc"
0
% puts $myIndex
4
myIndex中的值为a的索引,因为a是第一个导致返回0的字符。

string map ?-nocase? mapping string
根据mapping表里面的key-value关系替换string中的子字符串,mapping是一个类似于key value key value …的列表,每个在string中的key都会被value替换。如果指定了-nocase,匹配就不需要考虑大小写,但是替换时完全按照替换字符的大小写进行替换。key和value都可以是多字符的,置换按照一定的顺序进行,所以在列表前面的key会被优先置换。string只会被置换一次,所以前面做过置换操作的字符将不匹配后面的key。
% string map "ab cd" "abababab"
cdcdcdcd
% string map "abc def ab gh" "abcabcababababc"
defdefghghghdef
匹配时忽略大小写:
% string map -nocase "abc dEf ab gh" "ABCabcababababc"
dEfdEfghghghdEf
% string map "abc dEf ab gh" "ABCabcababababc"
ABCdEfghghghdEf

string match ?-nocase? pattern string
如果string匹配pattern就返回1,否则返回0。如果指定了-nocase样式匹配将是大小写不敏感的。对于两个字符串,需要完全相同,除非在pattern中指定了下面的匹配风格:
% string match "string match" "string match"
1
* 匹配任何长度字符,包括空字符。
匹配以string开头的字符串:
% string match "string*" "string match"
1
? 匹配任何一个字符。
匹配string后面再有任意一个字符的字符串:
% string match "string?" "string "
1
[chars] 匹配任何给定的char字符。如果是以x-y的形式出现则匹配x到y之间的所有字符。如果指定了-nocase,范围被扩展到小写字母,比如即使“_”并不在{[A-z]}中,{[A-z]}也匹配“_”,使用了-nocase后{[A-z]}被认为是{[A-Za-z]} 。
匹配三个字母:
% string match {[A-z][A-z][A-z]} "abc"
1
使用中括号时需要注意,这个符号对tcl有特殊的意义,所以需要用花括号括起来。
/x 匹配单一的字符x,提供了在pattern中匹配特殊字符*?[]/的方法。
需要匹配一个单一字符或者特殊字符:(如果这个字符有特殊意义就不行,比如/x匹配x但是/t就不匹配t,建议在需要匹配特殊字符再使用)
% string match /? ?
1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: