加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

tcl中string的用法

(2011-06-29 11:21:43)
标签:

tcl脚本

分类: tcl
 
这里对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,匹配就不需要考虑大小写,但是替换时完全按照替换字符的大小写进行替换。keyvalue都可以是多字符的,置换按照一定的顺序进行,所以在列表前面的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

0

阅读 收藏 喜欢 打印举报/Report
前一篇:gnuplot的安装
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有