首页 > 其他 > 详细

TCL基本语法2

时间:2020-08-05 00:33:25      阅读:104      评论:0      收藏:0      [点我收藏+]

TCL基本语法2

1、format和scan

两个基本的函数,和C语言中的sprintf和scanf的作用基本相同。format将不同类型的数据压缩在字符串中,scan将字符串中的数据提取出来。

set name Jack
set age 100
set worker [format "%s is %d years old" $name $age]
puts $worker
scan $worker "%s is %d years old" name_scan age_scan
puts $name_scan\ and\ $age_scan

基本上就是将变量组合然后分解的过程。

Jack is 100 years old
Jack and 100

2、regexp

匹配字符指令,就是将待测的字符串与正则表达式匹配,完全符合返回1,否则为0,后置参数变量可以接收每层的配置好的结果。

puts  [ regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} ab ]

#匹配参数服从正则表达式,但是又有区别
#|     ---------两项取其一即可
#(0x)?    -----对前面项0x进行0次或1次匹配
#[0-9a-fA-F] ---0-9 和a-f的大小写都可出现
#+   -------对于前面的项1次或多次匹配
#^   -------从头开始匹配,头部不符合即失败
#$   -------从尾部匹配,尾部不符合即失败

regexp { ([0-9]+) *([a-z]+)} "there is 00100 apples" total num word
puts $total\n$num\n$word
#第一个变量是整个表达式的结果
#第二个参数是第一次层的子表达式
#第三个参数是第二层的子表达式
#所谓的子表达式,就是括号覆盖的地方
regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 0xab011cdf S1 S2 S3
puts $S1\n$S2\n$S3
1
 00100 apples
00100
apples
0xab011cdf
0xab011cdf
0x

第一个是匹配十六进制及10进制的数,匹配成功,结果正常。

第二个是匹配数字加字符串,第一层是全匹配的,第二层前半部分是匹配数字的,第二层后半部分是匹配字符的。

第三个是匹配十六进制和十进制数的,第一层是前后匹配都正确的,第二层是匹配正确的,第三层是0x匹配的。

从第二个和第三个的区别可以看出,regexp后面的传递参数的层数是由括号决定的。{()()}的三个参数依次是大括号、左括号和右括号,{(())}则是外中内依次读取。

TCL基本语法2

原文:https://www.cnblogs.com/electricdream/p/13436905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!