反斜杠 \ ,双引号 ” ”和大括号 { } 。
反斜杠在替换中已经介绍过了,其余两种如下:
示例1:
% set price 5
5
% set msg "egg price is \$$price"
egg price is $5
% set msg {egg price is \$$price}
egg price is \$$price
示例2:
% set name book
book
% set value 10
10
% puts [format "Item:%s\t%5.3f" $name $value]
Item:book 10.000
puts中的"Item:%s\t%5.3f"是format命令的格式说明,通常包含一些特殊的字符,如\t表示tab,由于必须在 format 命令调用前替换反斜杠,因此应当使用双引号来形成格式说明符。这里的格式用tab 分隔name 和 value,
%s和%5.3f用于说明 name 和 value 的格式。
示例3:
% set x 8
8
% set y 9
9
% puts stdout "[expr $x + $y]"
17
% puts stdout [expr $x + $y]
17
% puts stdout "$x + $y] = [expr {$x + $y}]"
8 + 9] = 17
% puts "\"(5-3)*4\" is : [expr (5-3)*4] "
"(5-3)*4" is : 8
不必要用双引号,为了显示“ ”,要加一个
二、 Tcl表达式和计算命令 2.1 tcl表达式
一个 Tcl 表达式由操作数、运算符和括号组成,在操作数和操作符以及括号之间可以用空格分开。表达式的操作数默认是十进制,也可以八进制(操作数第一个字符是 0)或者十六进制《操作数的前两个字符是 0x)。操作数可以是整数也可以是浮点数。表达式的运算待包括逻辑运算符和算术运算符,如表所示:
2.2 TCL内置函数
![在这里插入图片tps://img-blog.csdnimg.cn/beab58ed0cc940a2919ccec4bd013755.png#pic_center)
2.3 expr命令
在TCL中用expr命令分析和解释数学表达式。
格式:
expr arg1? aeg2?...?
示例1:
%set x 10
10
% set y 20
20
% set z [expr "$x + $y"]
30
% set z_label "$y plus $x is :"
20 plus 10 is :
% puts {z_lable [expr "$x + $y"]}
z_lable [expr "$x + $y"]
% puts "{z_lable [expr "$x + $y"]}"
{z_lable 30}
示例2:
puts "pi = [expr 2*asin(1)]"
pi = 3.141592653589793
示例3:
set x 10
10
set len [expr {[string length foobar] + $x}]
16
2.4 incr命令
incr根据步长增加或减少。
示例:
% set a 10
10
% incr a 2
12
% incr a -3
9
三、 Tcl字符串操作
TCL把所有的输入都当做字符串看待。
3.1 format命令
格式:
format formatsring arg1 ...argn
formatstring格式说明包含了位置说明、旗标、域宽、精确度、字符长度和转换字符等部分。formatstring由 \、字符和%field组成。%field 是字符串,以下面表格中的任意一个字符结束,这个字符说明了格式数据所对应的数据类型。
由于格式定义时经常使用空格,所以要用双引号或者大括号将定义括起来。
3.1.1 format 位置指示
格式:
数字$
#意思是直接取第几个参数的值,参数计算从1开始。
示例:
format {%2$s} a b c
format ”%2$s” a b c
b
% set str [format "%3\$s %1\$s %2\$s" "love" "y" "i"]
i love y
由于有特殊的作用,上面的阻止了有特殊的作用,上面的{ }阻止了有特殊的作用,上面的阻止了的置换作用,所以数字功能正确,但如果用””,则要加上抑制功能正确,但如果用” ”,则要加上 \ 抑制功能正确,但如果用””,则要加上抑制置换作用。
3.1.2 format 其他
格式化旗标、字符宽度、精度等。
-靠左对齐
+
显示数值正负号
–
–
+
以0补满
#
遇到O将前缀填入0遇到H添入0x
示例:
% set name ford
ford
% set age 15
15
% set msg [format "%s is %5d years old" $name $age]
ford is 15 years old
% format "%#05x" 20
0x014
3.2 string命令
如果要把某个简单变量当做字符串处理/看待,可以用string命令提供的功能。option多达20个:
3.2.1 字符串长度、索引、范围 length 命令
返回字符串长度,空格、换行也算一个字符(需要” "引起来)。
格式1:
string length string1
示例:
string length "aa112 11"
8
index 命令
返回字符串中第charIndex个字符串.
格式:
string index string charIndex
#charIndex可以是下面的值:
#整数n : 第n个字符;
#end : 最后一个字符;
#end-整数n : 倒数第n个字符。
示例:
string index aabbccdd 3
b
range 命令
返回字符串中fist到last的距离。
示例:
string range aabbccdd 1 3
abb
3.2.2 字符串比较 compare命令
格式:
string compare ?-nocase? ?-length int? string1 string2
对两个字符串进行比较,如果他们严格(-exact)相等,返回0,如果第一个字符串在字典中先于第二个字符串,返回-1,否则返回1.。-length可以指定匹配的长度,即从第一位开始匹配多少位。
示例:
% string compare aaa123 bbb123
-1
% string compare bbb123 aaa123
1
% string compare aaa123 aaa123
0
match命令
格式:
string match ?-nocase? Pattern string
如果pattern匹配string,返回1,否则返回0;-nocase参数sdk脚本语言,不区分大小写。
示例:
string match *i* aaaiaaa
1
string match *[0-9] aaaiaa123
invalid command name "0-9"
#大括号括起来
string match {*[0-9]} aaaiaa123
1
string match -nocase {[a-z]*[0-9]} aaa123
1
equal 命令
格式:
string equal ?-nocase? ?-length int? string1 string2
对两个字符串进行比较,如果他们严格(-exact)相等,返回1,否则返回0,-length可以指定匹配的长度,即从第一位开始匹配多少位。
示例:
% string equal -length 12 aaabbb123 aaabbb123
1
% string equal -length 12 aaabbb123 aaaccc123
0
3.2.3 字符串大小写转化 tolower 命令
格式:
string tolower string ?first? ?last?
将first到last位置的字符串改小写。
示例 :
% string tolower AABBCCDD 1 5
AabbccDD
toupper 命令
格式:
string toupper string ?first? ?last?
将first到last位置的字符串改大写。
示例 :
string toupper aabccdd 1 5
aABCCDd
totitle 命令
格式:
string totitle string ?first? ?last?
将first到last位置的字符串改标题格式。
示例:
% string totitle aabccdd 1 5
aAbccdd
3.2.4 字符串剪裁 replace 命令
格式1:
string replace string fist last ?newstring?
使用newstring替换 fist到last位置的字符。如果newstring不存在,则将fist到last删除。如果fist比last大,则不替换。
示例:
% string replace aabbccdd 0 1 xx
xxbbccdd
% string replace aabbccdd 1 0 xx
aabbccdd
% string replace aabbccdd 0 1
bbccdd
map 命令
格式:
string map ?-nocase? mapping string
将string中出现的所有关键字都置换为响应值,置换按顺序进行的列表中先出现的关键字先处理。只对字符迭代一次,所以前面进行置换不会影响接下来的匹配查找。
示例:
% string map {aa AA} aabbccdd
AAbbccdd
% string map {aa AA bb BB cc CC} aabbccdd
AABBCCdd
trim 命令
格式:
string trim string ?chars?
将string开头和结尾出现的要剪裁的字符都删除。从两端开始,如果字符是a,则裁剪掉,这是针对字符辅助论坛,而不是字符串。
示例:
% string trim aabbccdd a
bbccdd
trimleft 命令
格式:
string trimleft string ?chars?
将string开头出现的要剪裁的字符都删除。同样针对字符。
示例:
% string trimleft a1abbccdd a
1abbccdd
trimright 命令
格式:
string trimright string ?chars?
将string结尾出现的要剪裁的字符都删除。同样针对字符。
示例:
% string trimright a1abbccd2d d
a1abbccd2
% string trimright a1abbccd2d 2
a1abbccd2d
3.2.5 字符串重复倒叙 repeat 命令
格式:
string repeat string count
将string重复cout次。
示例:
% string repeat string 2
stringstring
reverse 命令
格式:
string reverse string
将string顺序倒过来。
示例:
% string reverse string
gnirts
3.3 字符串匹配
字符串一个重要运算是宇符串的模式匹配。模式本身是字符串,这个字符串也称为正则表达式 (regular expression),它描述了待匹配子串的构成规则。例如,a*是一种模式,表示以a开始的任意长度任意字符的字符串。
TCL支持基于正则表达式的模式匹配机制,相对于string match 命令这种机制匹配更复杂,功能更强大。TCL中有两条显示支持正则表达式的匹配命令,其他命令的选择项中包含了-regexp 以支持正则表达式。
3.3.1、正则表达式:
可以按照下面的几个规则表达正规表达式:
^ : 匹配一个串的开始;
$ : 匹配一个串的结尾;
. : 匹配任意一个单字符;
* : 匹配任意多次*前的字符;
+ : 匹配任意多个,但是至少要有一次匹配+前的字符;
[...] : 匹配字符集合中的任意字符;
[^...] : 匹配任意不再^后所列的集合中的字符;
(...) : 把字符集合形成一个组。
在正则表达式中,* 符号匹配零个或者多个在 * 前的字符。例如a*,可以匹配a, aaaa 或者空串。如果在 * 是一个字符集合,通常用[ ]表示字符集合,那么 * 将匹配这个集合中任意数量的任意字符。例如,*[a-c]可以匹配 aa,abc, aabcbc,afg,cfg等任意字符、字符串或者空串。
**+符号的规则与 * 相同sdk脚本语言,但是它要求至少有一个字符匹配。例如,[a-c]**匹配至少包含 a,b,c一次的所有字符、字符串,但是不能是空串。
[^0-5a-g]可以匹配任意不包含 0-5或者a-g 的任意字符、字符串,不包含空串。
例如:
([A-Za-z]+) +([a-z]+) +[is]) 这个表达式的说明了一个字符串的构成规则:
1 第一个字符是A-Z 中的任意一个大写字母,第二个字符是a-z中任意一个小写字母,这种规则至少重复一次;
2 空格至少重复一次;
3 a-z中的小写字母任意可以至少重复一次;
4 空格至少重复一次
5 出现 is 字符串;
按照上面的规则,字待串 My classmate liming is a good student 是可以匹配这个规则的。
3.3.2、regexp 命令
格式:
regexp switches ? exp string ? matchVar ? ? subMatchl ...subMatchN?
这个命令必选的两个参数是exp 和string,其余的参数可选。regexp 命令在string 中搜索正规表达式exp,比较字符串 string 是否与 exp 部分或者全部匹配,如果匹配则返回1,否则返回 0。如果给出了参数 matchVar,那么将字符串中的子串拷贝到matchVar 中。按照自左向右的方式,subMatchVar 依次存放了和正则表达式exp中圆括号语法(子模式)相匹配的子字符串。
示例:
% set sample "Where there is a will, There is a way."
Where there is a will, There is a way.
% set result [regexp {[a-z]+} $sample match]
1
% puts "Result: $result; match: $match "
Result: 1; match: here
3.3.3、regsub 命令
基于正则表达式完成字符串匹配和替换…
格式:
regsub ? switches? exp string subSpec varName
在string中搜索匹配正规表达式exp 的子串,用subSpec 替换 string 中这些子串,并把结果拷贝到 varName 中。替换模式 subSpec包含有**&和\0**时,这些字符将被 string 中与 exp相匹配的子串替换,如果是\后面是数字 1-9,那么它们将被 **string 中与exp”()”**规则中相匹配的子串替换。
示例:
% set sample "She is a student."
She is a student.
% regsub "student" $sample "teacher" sample2
1
% puts "New: $sample2"
New: She is a teacher.
来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!