tcl tk例項詳解 string(三)

2021-04-17 06:42:54 字數 3899 閱讀 2289

這裡對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...