tcl/t字符串操作【二】
确定字符串类型:
string is digit 1234
=>1
string is digit “abc”
=>0
默认如果字符串为空,对任何类型 string is 都返回 1 ,可以指定 -strict 选项强制要求在字符串为空是返回 0:
string is control “”
=>1
string is control –strict “”
=>0
string is 命令支持的字符类型
类型 |
测试对象 |
Alnum |
全为 Unicode 字母或数字 |
alpha |
全为 Unicode 字母 |
ascii |
全为 7 位 ASCII 字符 |
boolean |
可以识别为布尔型值( 0 1 no yes true false on off ) |
control |
全为 Unicode 控制字符 |
digit |
全为 Unicode 数字 |
double |
双精度浮点值(忽略前后的空白)。如果检测到上下界溢出,则将 -failindex 变量值设为 -1 |
false |
可识别为布尔型的值“非“( 0 false no off ) |
true |
可识别为布尔型的值“是( 1 true yes on ) |
graph |
全为非空白的 Unicode 打印字符 |
integer |
32 位整型值(忽略前后的空白)。如果检测到上下界溢出,则将 -failindex 变量值设为 -1 |
list |
一个有效的列表结构。如果列表结构不正确, -failindex 变量会设置为列表中第一个导致结构无效的元素 |
lower |
全为 Unicode 小写字母 |
upper |
全为 Unicode 大写字母 |
|
全为 Unicode 打印字符(包括空白) |
punct |
全为 Unicode 标点符号 |
space |
全为 Unicode 空白符号 |
wideinteger |
长整型变量(忽略前后的空白)。如果检测到上下界溢出,则将 -failindex 变量值设为 -1 |
wordchar |
全为字母和连接符(主要就是指下划线) |
xdigit |
全为十六进制数,包括 0~9 , a~f,A~F |
用 format 创建字符串:
format “ The square root of 10 is %.3f” [expr sqrt(10)]
=> The square root of 10 is 3.162
format 基本上支持 ANSI C 的 sprintf 定义的所有转换符,如 %d 表示十进制整数, %x 表示十六进制整数, %e 表示指数形式的实数。
用 scan 解析字符串:
scan “16 units, 24.2% margin” “%d units, %f” a b
=>2
结果 a 的值为 16 , b 的值为 24.2
通配符样式的模式匹配: string match
string match ?-nocase? pattern string
返回 1 —匹配, 0 —不匹配
eg:
string match a* “alpha”
=>1
string match a* “bat”
=>0
string match a* “Amazing”
=>0
string match –nocase a* “Amazing”
=>1
使用正则表达式进行模式匹配: regexp 命令
regexp 命令,返回 0 或者 1 ,表示能否匹配。用法:
regexp pattern string ?var1 var2 var3…?
eg:
regexp {^[0-9]+$} 510
=>1
regexp {^[0-9]+$} -510
=>0
如果给出 ?var1 var2 var3…? 选项,则 var1 存入与整个正则表达式匹配的子字符串, var2 存入与捕获到的第一个子表达式相匹配的子字符串,一次类推。 eg:
regexp {([0-9]+)*([a-z]+)} “Walk 10 km” a b c
结果 a 的值为 ”10km” , b 的值为 10 , c 的值为 km
可以指定 -start 选项指定开始匹配的位置; -all 选项指定查找尽量多次的匹配; -nocase 选项指定不区分大小写。
-indices 选项指明额外的变量不应该用于存放匹配的子字符串的值,而是存放给出子字符串范围的起始索引。 eg :
regexp –indices {([0-9]+)*([a-z]+)} “Walk 10 km” a b c
结果 a 的值为 5 9 , b 的值为 5 6 , c 的值为 8 9.
-inline 选项让 regexp 把匹配变量返回为一个数据列表。
regexp –inline {([0-9]+)*([a-z]+)} “Walk 10 km”
=>{10 km} 10 km
使用正则表达式进行替换: regsub
regsub pattern string replace var
regsub there “ they live there lives ” their x
=>1
返回 1 —表示匹配, 0 —表示不匹配。
替换后的结果赋给参数 x ,因此 x 的值为 ”they live their lives ”
通常, regsub 只进行简单的替换,只替换最先出现的匹配项。然而,如果制定了 -all 选项,则替换所有:
regsub –all a “ababa” zz x
=>1
x 的值为 ”zzbzzbzz”
还可以指定 -start 、 -nocase 等选项。
posted on 2011-12-19 22:49 balabala已被注册 阅读(6442) 评论(0) 编辑 收藏 举报