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 大写字母

print

全为 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编辑  收藏  举报

导航