TCL字符串操作

news2024/9/28 13:27:20

format命令

因为 TCL 把所有的输入都当作字符串看待,所以 TCL 提供了较强的字符串操作功能,TCL 中与 字符串操作有关的命令有:string、format、regexp、regsub、scan 等。

语法:format formatstring ?vlue value...?

format 命令类似于 ANSIC 中的 sprintf 函数和 MFC 中 CString 类提供的 Format 成员函数。 它按 formatstring 提供的格式,把各个 value 的值组合到 formatstring 中形成一个新字符串, 并返回。例如:

%set name john

输出:John

%set age 20

输出:20

%set msg [format "%s is %d years old" $name $age]

输出:john is 20 years old

scan命令

语法:scan string format varName ?varName ...?

scan 命令可以认为是 format 命令的逆,其功能类似于 ANSI C 中的 sscanf 函数。它按 format 提供的格式分析 string 字符串,然后把结果存到变量 varName 中,注意除了空格和 TAB 键之 外,string 和 format 中的字符和'%'必须匹配。例如:

% scan "some 26 34" "some %d %d" a b

输出:2

% set a

输出:26

% set b

输出:34

% scan "12.34.56.78" "%d.%d.%d.%d" c d e f

输出:4

% puts [format "the value of c is %d,d is %d,e is %d ,f is %d" $c $d $e $f]

输出:the value of c is 12,d is 34,e is 56 ,f is 78

scan 命令的返回值是匹配的变量个数。而且,我们发现,如果变量 varName 不存在的话,TCL 会自动声明该变量。

regexp命令

语法:regexp ?switchs? ?--? exp string ?matchVar?\ ?subMatchVar subMatchVar...?

regexp 命令用于判断正规表达式 exp 是否全部或部分匹配字符串 string,匹配返回 1,否则 0。

在正规表达式中,一些字符具有特殊的含义,下表一一列出,并给予了解释。

 下面的一个例子是从《Tcl and Tk ToolKit》中摘下来的,下面进行说明:

^((0x)?[0-9a-fA-F]+|[0-9]+)$

这个正规表达式匹配任何十六进制或十进制的整数。

两个正规表达式以|分开(0x)?[0-9a-fA-F]+和[0-9]+,表示可以匹配其中的任何一个,事实 上前者匹配十六进制,后者匹配的十进制。

^表示必须从头进行匹配,从而上述正规表达式不匹配 jk12 之类不是以 0x 或数字开头的串。

$表示必须从末尾开始匹配,从而上述正规表达式不匹配 12jk 之类不是数字或 a-fA-F 结尾的 串。

下面以(0x)?[0-9a-fA-F]+ 进行说明,(0x)表示 0x 一起作为一项,?表示前一项(0x)可以出 现 0 次或多次,[0-9a-fA-F]表示可以是任意 0 到 9 之间的单个数字或 a 到 f 或 A 到 F 之间的 单个字母,+表示象前面那样的单个数字或字母可以重复出现一次或多次。

% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} ab

输出:1

% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 0xabcd

输出:1

% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 12345

输出:1

% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 123j

输出:0

如果 regexp 命令后面有参数 matchVar 和 subMatchVar,则所有的参数被当作变量名,如果 变量不存在,就会被生成。 regexp 把匹配整个正规表达式的子字符串赋给第一个变量,匹配 正规表达式的最左边的子表达式的子字符串赋给第二个变量,依次类推,例如:

% regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word

1

% puts " $total ,$num,$word"

100 apples ,100,apples

regexp 可以设置一些开关(switchs〕,来控制匹配结果:

 regsub命令

语法:regsub ?switchs? exp string subSpec varname

regsub 的第一个参数是一个整个表达式,第二个参数是一个输入字符串,这一点和 regexp 命 令完全一样,也是当匹配时返回 1,否则返回 0。不过 regsub 用第三个参数的值来替换字符串 string 中和正规表达式匹配的部分,第四个参数被认为是一个变量,替换后的字符串存入这个 变量中。例如:

% regsub there "They live there lives " their x

1

% puts $x

They live their lives

这里 there 被用 their 替换了。

regsub 命令也有几个开关(switchs):

-nocase 意义同 regexp 命令中。

-all 没有这个开关时,regsub 只替换第一个匹配,有了这个开关,regsub 将把所有匹配的地 方全部替换。

-- 意义同 regexp 命令中。

string命令

string 命令的语法:string option arg ?arg...?

string 命令具有强大的操作字符串的功能,其中的 option 选项多达 20 个。下面介绍其中常用 的部分。

1、string compare ?-nocase? ?-length int? string1 string2

把字符串 string1 和 string2 进行比较,返回值为-1、0 或 1,分别对应 string1 小于、等于或大 于 string2。如果有 -length 参数,那么只比较前 int 个字符,如果 int 为负数,那么这个参 数被忽略。 如果有 -nocase 参数,那么比较时不区分大小写。

2、string equal ?-nocase? ?-length int? string1 string2

把字符串 string1 和 string2 进行比较,如果两者相同,返回值为 1,否则返回 0。其他参数与 8.5.1 同。

3、string first string1 string2 ?startindex?

在 string2 中从头查找与 string1 匹配的字符序列,如果找到,那么就返回匹配的第一个字母 所在的位置(0-based)。如果没有找到,那么返回-1。如果给出了 startindex 变量,那么将从 startindex 处开始查找。例如:

% string first ab defabc

输出:3

% string first ab defabc 4

输出:-1

4、string index string charIndex

返回 string 中第 charIndex 个字符(0-based)。charIndex 可以是下面的值:

整数 n: 字符串中第 n 个字符(0-based)

end : 最后一个字符

end-整数 n:倒数第 n 个字符。string index "abcd" end-1 返回字符'c'

如果 charIndex 小于 0,或者大于字符串 string 的长度,那么返回空。

例如:

% string index abcdef 2

输出:c

% string index abcdef end-2

输出:d

5、string last string1 string2 ?startindex?

参照 3.唯一的区别是从后往前查找

6、string length string

返回字符串 string 的长度.

7、string match ?-nocase? pattern string

如果 pattern 匹配 string,那么返回 1,否则返回 0.如果有-nocase 参数,那么就不区分大小写.

在 pattern 中可以使用通配符:

* 匹配 string 中的任意长的任意字符串,包括空字符串.

? 匹配 string 中任意单个字符

[chars] 匹配字符集合 chars 中给出的任意字符,其中可以使用 A-Z 这种形式

\x 匹配单个字符 x,使用'\'是为了让 x 可以为字符*,-,[,].

例子:

% string match * abcdef

输出:1

% string match a* abcdef 1 string match a?cdef abcdef

输出:1

% string match {a[b-f]cdef} abcdef         //注意一定药用'{',否则 TCL 解释器会把 b-f 当作命 令名

输出:1         //从而导致错误

% string match {a[b-f]cdef} accdef

输出:1

8、string range string first last

返回字符串 string 中从第 first 个到第 last 个字符的子字符串(0-based)。如果 first<0,那么 first 被看作 0,如果 last 大于或等于字符串的长度,那么 last 被看作 end,如果 first 比 last 大,那么返回空。

9、string repeat string count

返回值为:重复了 string 字符串 count 次的字符串。例如:

% string repeat "abc" 2

输出:abcabc

10、string replace string first last ?newstring?

返回值为:从字符串 string 中删除了第 first 到第 last 个字符(0-based)的字符串,如果给出 了 newstring 变量,那么就用 newstring 替换从第 first 到第 last 个字符。如果 first<0,那 么 first 被看作 0,如果 last 大于或等于字符串的长度,那么 last 被看作 end,如果 first 比 last 大或者大于字符串 string 的长度或者 last 小于 0,那么原封不动的返回 string 。

11、string tolower string ?first? ?last?

返回值为:把字符串 string 转换成小写后的字符串,如果给出了 first 和 last 变量,就只转换 first 和 last 之间的字符。

12、string toupper string ?first? ?last?

同 11。转换成大写。

13、string trim string ?chars?

返回值为:从 string 字符串的首尾删除掉了字符集合 chars 中的字符后的字符串。如果没有给出 chars,那么将删除掉 spaces、tabs、newlines、carriage returns 这些字符。例如:

% string trim "abcde" {a d e}

输出:bc

% string trim " def

> "

def

14、string trimleft string ?chars?

同 13。不过只删除左边的字符。

15、string trimright string ?chars?

同 13。不过只删除右边的字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】电商项目秒杀问题之下单接口优化:Redis缓存、MQ以及lua脚本优化高并发背景下的秒杀下单问题

目录 一、优化思路 二、缓存库存与订单 1、库存缓存的redis数据结构 2、订单信息缓存的redis数据结构 三、整体流程 四、lua脚本确保权限校验操作的原子性 一、优化思路 【Redis】电商项目秒杀问题之超卖问题与一人一单问题_1373i的博客-CSDN博客https://blog.csdn.net/q…

chatgpt赋能Python-python3_打印

Python3 打印&#xff1a;一篇介绍性SEO文章 如果你是一名Python编程工程师&#xff0c;那么你一定知道在Python中打印是一项基本技能。在Python3中&#xff0c;打印已经发生了一些变化&#xff0c;本文将介绍Python3中打印的新特性和使用方法&#xff0c;并为您提供一些最佳实…

算法设计与分析:随机化算法(作业-必做)(头歌实验)

第1关&#xff1a;硬币实验 任务描述 本关任务&#xff1a;计算机产生的伪随机数来模拟抛硬币试验。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何获取数组的长度&#xff0c;2.如何遍历数组。 随机数 随机数在随机化算法设计中扮演着十分重要的角…

云原生CAx软件:gRPC

gRPC是Google基于HTTP/2协议开发的一套开源、跨平台的高性能RPC框架&#xff0c;可用于连接微服务架构内的各种服务&#xff0c;亦可以连接客户端与后端服务。 Ref. from gRPC gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can…

策划能力提升攻略:让你成为行业大咖

策划能力的提高是没有立竿见影的&#xff0c;首先你了解策划的本质吗?了解市场营销的本质吗?了解战略和策略的关系吗? 不是经常把什么IMC/USP/4P/4C/DNA/核心价值挂在嘴边&#xff0c;会做做波特SWOT分析、用用BCG的模型、MINKSY的7S模型这些就是策划了的。 别人的理论你可…

WEB AK赛

文章目录 web1_观字SSRF常见的URL绕过方式 web2_观星web3_观图web4_观心签到_观己 web1_观字 <?php#flag in http://192.168.7.68/flag if(isset($_GET[url])){$url $_GET[url];$protocol substr($url, 0,7);if($protocol!http://){die(仅限http协议访问);}if(preg_matc…

安装Maven 3.6.1:图文详细教程(适用于Windows系统)

一、官网下载对应版本 推荐使用maven3.6.1版本&#xff0c;对应下载链接&#xff1a; Maven3.6.1下载地址 或者&#xff0c;这里提供csdn下载地址&#xff0c;点击下载即可&#xff1a; Maven3.6.1直链下载 其他版本下载地址&#xff1a; 进入网址&#xff1a;http://mave…

【Linux之IO系统编程学习】01.open函数使用 代码实现touch命令效果

【Linux之IO系统编程学习】 项目代码获取&#xff1a;https://gitee.com/chenshao777/linux_-io.git &#xff08;麻烦点个免费的Star哦&#xff0c;您的Star就是我的写作动力&#xff01;&#xff09; 01.open函数使用 & 代码实现touch命令 一、open函数&#xff08;ma…

ARM处理器概论与组织

目录 1.ARM产品系列 2.体系结构 3.ARM指令集 定义&#xff1a; ARM的指令集&#xff1a; 4.编译原理 5.ARM存储模型 6.ARM的8种工作方式 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义 一个公司的名称、一类处理器的通称、一种技术&#xff0c;我们在这…

【中阳期货】人工智能AI与期货有什么 关系

人工智能&#xff08;AI&#xff09;和期货交易之间有许多相互影响的因素。AI可以帮助期货交易者在交易决策中更好地应对大量数据&#xff0c;加强交易系统预测能力&#xff0c;优化资产配置策略。以下是AI与期货交易的一些具体关系&#xff1a; 数据分析&#xff1a;AI有能力高…

python pickle反序列化分析

文章目录 前言Pickle的作用pickle反序列化pickletools和反序列化流程漏洞产生(__reduce__)R指令的绕过通过i和o指令触发 总结 前言 春秋杯中遇到了一道python题&#xff0c;使用的了numpy.loads()触发反序列化漏洞&#xff0c;百度学习了一下&#xff0c;发现numpy.load()会先…

【mysqlbinlog 恢复数据】

不小心把数据删掉了 首先要拿到binlog文件 命令行执行 /usr/local/mysql/bin/mysqlbinlog --base64-outputdecode-rows --start-datetime"2023-05-19 09:01:32" --stop-datetime"2023-05-19 09:01:35" -v /Users/zylong/Downloads/mysql-bin.003178 --re…

动态规划-状态机模型

大盗阿福 题目 链接&#xff1a;https://www.acwing.com/problem/content/1051/ 阿福是一名经验丰富的大盗。趁着月黑风高&#xff0c;阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N N N 家店铺&#xff0c;每家店中都有一些现金。 阿福事先调查得知&#xff0c;只…

chatgpt赋能Python-python3_9怎么下载

Python 3.9: 从哪里下载以及如何安装 Python是一种高级编程语言&#xff0c;被广泛使用于数据科学、人工智能、Web开发等领域。Python的最新版本是Python 3.9&#xff0c;它带来了一些新的特性和改进。对于那些希望尝试Python 3.9的人来说&#xff0c;了解如何下载和安装是很重…

chatgpt赋能Python-python3下载文件

Python3下载文件&#xff1a;从入门到实践 在Python编程语言中&#xff0c;下载文件是一个常见的需求。无论你是想下载图片、视频、文本文件或者其他类型的文件&#xff0c;Python都提供了强大的工具来实现这一操作。在本文中&#xff0c;我们将深入探讨如何使用Python3来下载…

pwn入门(二)环境搭建

一.前言 在上一篇中介绍了一下pwn和一些前置知识&#xff0c;但是呢以我的感觉&#xff0c;我觉得ctf还是得多做题的&#xff0c;所以呢&#xff0c;我选择边做边学&#xff0c;我觉得这样可以快速熟悉pwn还可以有成就感。 这一篇就是搭建环境的分享&#xff0c;同时还有大佬告…

【问题记录】USB monitor抓包工具显示音频数据CRC error

一&#xff0c;简介 在进行UAC2.0调试的过程中&#xff0c;使用USB monitor抓包工具抓取音频流数据出现数据错乱现象&#xff0c;本文对该问题进行分析记录。 二&#xff0c;问题记录及分析过程 2.1 先看下正常的抓包数据是什么样子&#xff1a; 从上图可以看出&#xff0c;…

VMware ESXi 6.0 多网卡接入 多网段绑定 虚机接入不同网段

网卡要与对应网段的网络联通。不同的网卡接入不同网段的网络。要为vmware esxi 6 的多个虚机配置不同网段的ip地址&#xff0c;首先选择主机对应的网口分别插上处于在不同网段的网线。 配置管理网络 多个网口接入&#xff0c;只可以配置一个管理网络&#xff0c;就是只有一个网…

基于XGBOOST模型预测货物运输耗时 - Part 2 通过方差分析了解文本型变量与数值型目标变量的关系

在分析数据之前&#xff0c;我们需要剔除异常值的影响&#xff0c;也就是在某个分组情况下&#xff0c;标准差过大&#xff08;标准差越大&#xff0c;证明情况越不稳定&#xff09;&#xff0c;如果标准差比较小&#xff0c;就算是最小值和最大值差的比较大&#xff0c;我也认…

chatgpt赋能Python-python3下载numpy包

Python3 下载numpy包教程 如果你是一名Python开发者&#xff0c;那你一定不会陌生于NumPy。NumPy是Python中的一个科学计算库&#xff0c;它主要用来处理数组和矩阵运算。本文将会教你如何在Python3中下载NumPy库。 步骤一&#xff1a;确认你已经安装了pip 如果你使用的是Py…