tcl string
关于tcl string的用法一直都是一个很重要的知识点。这是对于字符串的一些处理。
下面总结string命令的用法。
一、字符串基础操作
1. 字符串表示
Tcl 字符串可用双引号、单引号或花括号包裹,支持多行字符串:
set str1 “Hello World” ;# 双引号
set str2 {Hello World} ;# 花括号
2. 长度与索引
string length:获取字符串长度。
set len [string length “abc”] ;# 返回 3
string index:按索引获取字符(索引从0开始)。
set char [string index “abc” 1] ;# 返回 “b”
string range:获取指定索引范围的子串。
set sub [string range “abcdef” 1 3] ;# 返回 “bcd”
二、字符串比较与匹配
1. 比较操作
string compare:字典序比较字符串(返回-1/0/1)
string compare “apple” “banana” ;# 返回 -1
string equal:严格比较字符串是否相同
string equal “yes” “YES” ;# 返回 0(区分大小写)
string equal -nocase “yes” “YES” ;# 返回 1(忽略大小写)
2.模式匹配
string match:使用 glob 风格模式匹配(支持 、? 等通配符)
string match "a" “apple” ;# 返回 1
三、字符串搜索与替换
子串搜索
string first:查找子串首次出现的位置(未找到返回-1)
set pos [string first “lo” “Hello”] ;# 返回 3
string last:查找子串最后一次出现的位置
set pos [string last “o” “Hello World”] ;# 返回 7
替换与修改
string replace:替换指定索引范围的字符或子串
set new [string replace “abcd” 1 2 “x”] ;# 返回 “axd”
string map:按字符映射表替换字符串
set new [string map {a 1 b 2} “abc”] ;# 返回 “12c”
四、字符串处理工具
大小写转换
string tolower:转全小写
string tolower “Hello” ;# 返回 “hello”
string toupper:转全大写
string toupper “Hello” ;# 返回 “HELLO”
修剪空白或字符
string trim:删除首尾指定字符(默认去空格)
string trim " text " ;# 返回 “text”
string trim “aabtextbaa” ab ;# 返回 “text”
重复生成字符串
string repeat:重复字符串指定次数
string repeat “a” 3 ;# 返回 “aaa”
五、高级功能
字符类型验证
string is:检查字符串是否为特定类型(如数字、字母等)
string is digit “123” ;# 返回 1
string is alpha “abc” ;# 返回 1
单词边界处理
string wordstart 和 string wordend:获取单词的起始/结束索引
set str “Tcl is fun”
set start [string wordstart $str 4] ;# 返回 4("is"的起始位置)
附加:
string 子命令速查表
子命令 功能描述 语法示例 返回值/说明
string length 获取字符串长度 string length “abc” 3
string index 获取指定索引位置的字符(索引从0开始) string index “abc” 1 “b”(索引超出范围时返回空字符串)
string range 获取指定索引范围的子串 string range “abcdef” 1 3 “bcd”(包含起始和结束索引)
string compare 字典序比较字符串(区分大小写) string compare “apple” “Banana” 1(“apple” > “Banana”,字典序中大写字母优先级低于小写)
string equal 严格比较字符串是否相等(可忽略大小写) string equal -nocase “YES” “yes” 1(-nocase 忽略大小写)
string match 使用通配符模式匹配(* 匹配任意字符,? 匹配单个字符) string match “a?c” “axc” 1(匹配成功返回 1,失败返回 0)
string first 查找子串首次出现的位置 string first “lo” “Hello” 3(未找到返回 -1)
string last 查找子串最后一次出现的位置 string last “o” “Hello World” 7(最后一个 o 的位置)
string replace 替换指定索引范围的字符或子串 string replace “abcd” 1 2 “xyz” “axyzd”(替换索引1到2的部分)
string map 按字符映射表替换字符串 string map {a 1 b 2} “abc” “12c”(替换所有匹配的字符)
string tolower 将字符串转为全小写 string tolower “HeLLo” “hello”
string toupper 将字符串转为全大写 string toupper “HeLLo” “HELLO”
string trim 删除字符串首尾的指定字符(默认删除空格) string trim “##text##” “#” “text”(仅删除首尾的 #)
string trimleft 删除字符串开头的指定字符 string trimleft “000123” “0” “123”
string trimright 删除字符串末尾的指定字符 string trimright “text**” “*” “text”
string repeat 重复字符串指定次数 string repeat “ab” 3 “ababab”
string reverse 反转字符串 string reverse “123” “321”
string is 检查字符串是否为特定类型(如数字、字母等) string is digit “123”
string is alpha “abc” 1(符合条件返回 1,否则 0)
string bytelength 获取字符串占用的字节数(针对多字节编码如UTF-8) string bytelength “你好” 6(UTF-8中每个中文字符占3字节)
string wordstart 获取指定位置所在单词的起始索引 string wordstart “Tcl is fun” 4 4(位置4对应单词 is 的起始位置)
string wordend 获取指定位置所在单词的结束索引 string wordend “Tcl is fun” 4 6(位置4对应单词 is 的结束位置+1)
关键说明
索引规则:
索引从 0 开始,支持负数(如 -1 表示最后一个字符)。
string range 包含起始和结束索引的字符。
通配符匹配:
string match 使用 glob 风格:* 匹配任意字符,? 匹配单个字符,[a-z] 匹配范围。
字符替换:
string map 按映射表替换所有匹配项(如 {a 1 b 2} 将 a 替换为 1,b 替换为 2)。
多字节编码:
string length 返回字符数,string bytelength 返回字节数(如 UTF-8 编码下的差异)。
— END —