這裡對string命令中的幾個子命令使用例項進行一些解釋,以便於更加容易理解string命令中的各個子命令,本文僅對三個比較複雜的命令進行例項解析。分別是is class、map和match三個子命令。
string isclass ?-strict? ?-failindexvarname?
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 true1
在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 01
列印字元,除了空格符:
% 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 11
任何大寫字母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 $myindex4
myindex中的值為a的索引,因為a是第乙個導致返回0的字元。
string map?-nocase?
string中的
key都會被
value替換。如果指定了-nocase,匹配就不需要考慮大小寫,但是替換時完全按照替換字元的大小寫進行替換。
key和
value都可以是多字元的,置換按照一定的順序進行,所以在列表前面的
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,範圍被擴充套件到小寫字母,比如即使「_」並不在中,也匹配「_」,使用了-nocase後被認為是 。
匹配三個字母:
% string match "abc"1
使用中括號時需要注意,這個符號對tcl有特殊的意義,所以需要用花括號括起來。
/x
匹配單一的字元x,提供了在
pattern中匹配特殊字元*?/的方法。
需要匹配乙個單一字元或者特殊字元:(如果這個字元有特殊意義就不行,比如/x匹配x但是/t就不匹配t,建議在需要匹配特殊字元再使用)
% string match /? ?
1
tcl tk例項詳解 string(二)
這裡對string命令中的幾個子命令使用例項進行一些解釋,以便於更加容易理解string命令中的各個子命令,本文僅對以下幾個string命令進行例項解析。分別是repeat replace reverse tolower totitle toupper trim trimleft trimright...
tcl tk例項詳解 eval
eval命令本身使用非常簡單,但是用處非常大,如果需要動態的構造命令,那麼必須使用eval命令。eval命令參考 命令格式 evalarg arg 如果是乙個引數,那麼相當於把這個引數當作命令來執行,如果有多個引數,eval命令會把多個引數以concat命令風格連線起來然後再執行命令。舉乙個最簡單的...
tcl tk例項詳解 catch和error
這兩個命令可以成對出現,catch命令捕獲乙個錯誤,error命令產生乙個錯誤。catch命令參考 error命令參考 catch命令可以用來捕獲乙個錯誤,乙個沒有捕獲的錯誤將終止指令碼的執行。error會產生乙個錯誤,error命令產生的錯誤如果沒有被catch捕獲將會導致指令碼的終止。catch...