Tcl-10. 字符串比较,匹配,替换,类别,映射,string 相关

2023-11-20

一、字符串比较:string compare, string equal

我们在 expr 和控制语句如 if、while 中可用比较运算符”==”、”!” 、“=”、 “”等来进行字符串比较,但是如不注意的话就会产生问题。首先必须用双引号来将字符串值括起来,这样表达式语法分析器才能按照字符串类型来进行识别。然后必须用花括号将整个表达式括起来以阻止主解释器将双引号去掉: if {$x == “true” } {puts ok} 然而,这样的直接比较还是会带来其他意想不到的问题。比较安全的方法是使用 string compare 和 string equal 来操作,而且这些 string 命令的执行速度也更快

下面是三个例子:if 中的条件都是判断是否相同,

注意命令返回值:string compare 在不同的情况下返回 1,相同返回 0。而 string equal 和 string match 则恰恰相反,相等或者匹配时返回 1 ,不同返回 0。

1.

>set x abc

>set y bcd

if {$x=="abc"} {

puts "ok"

} else {

puts "go"

}

=>ok

2. string equal 相同返回1

>set x abc

>set y bcd

if {[string equal $x $y] == 1} {

puts "ok"

} else {

puts "go"

}

=>go

3. string compare 相同返回0

>set x abc 

set y bcd

if {[string compare $x $y] == 0} {

puts "ok"

} else {

puts "go"

}

=>go

二、字符串匹配:string match

string match 来匹配字符的结构如下:string match pattern str

为了使结果返回 1(匹配),pattern 和字符 str 必须相同,除非你是使用了匹配字符。

字符                 说明

*                       通配符。匹配任意数量和值的任意字符

?                     匹配一个字符

[chars]              匹配 chars 中的任意一个字符,注意与正则表达式的元字符[abc] 和 [^abc]区分开

1.

>string match {[ab]*} beee

=>1

string match 支持匹配字符集。字符集要用花括号括起来以便 Tcl 正确理解方括号内是匹配模式而不是嵌套的命令

>set x abc

>string match {[a]*} $x

=>1 

也可以使用语法[x-y]来指定将要匹配的一个区段的字符。如[a-m]就表示所有从 a 到 m 的小 写字母集。一个集合也不限定一个区段:

>string match {[a-z0-9]} 6

=>1

>string match {[a-z0-9]} 66

=>0

>string match {[0-9][0-9]} 66

=>1

三、字符串替换:string replace

string replace 可以用新的字符串代替字符串中指定范围内的字符,如果没有指定新字符串,则指定范围内的字符都会被删除。另外注意:替换不改变原来字符串变量的值,只是返回 更改后的新字符串。

>string replace aaaabbbb 1 3 ccc

=>acccbbbb

>string replace aaaabbbb 1 3

=>abbbb

>set a aaabbb

>string replace $a 1 2 abbb

>puts $a

=>aaabbb ;#a 的值并没有改变

四、字符类别:string is

string is 命令用来测试一个字符串是否属于某个特定的类(class)。它对于进行参数输入合 法性检查非常有效。

比如,要确保输入参数是整数,则可以这么做:

>if {![string is integer $input]} {

error "Invalid input parameter: $input. Please enter a integer number"

}

if 语句检查输入参数 input 的值是否为 integer,如果不是则报错。 命令 string is 当正确时返回 1,不正确返回 0,”!”是逻辑非操作。error 命令和 puts 作用相 似,但 error 会终止程序

>set input 66

>if  {![string is integer $input]} {

error "ERROR"

} else {

puts "input is integer"

}

=>input is integer

 五、字符串映射:string map

string map 命令根据字符映射对字符串进行转换。映射以输入、输出表的形式表示。凡是字符串中包含有输入序列的地方都使用相应的输出序列替换。输入、输出要成对使用:

>string map {f p d l} "food"

=>pool

上例命令中 {f p d l}为输入、输出表,输入、输出项成对出现:f、d 为输入,p、l 为输出,f 对应 p,而 d 对应 l。命令的结果是字符串 food 中的 f 被 p 替换,d 被 l 替换。

输入和输出项可不止一个字符而且不要求长度相同:

>string map {f pp d ll oo a} "food"

=>ppall

string map 命令和 UNIX shell 的 tr 命令比较相似。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tcl-10. 字符串比较,匹配,替换,类别,映射,string 相关 的相关文章

  • 如何重命名 MySQL 数据库(更改架构名称)?

    如何快速重命名 MySQL 数据库 更改其架构名称 通常我只是转储数据库并使用新名称重新导入它 对于非常大的数据库来说 这不是一个选项 显然RENAME DATABASE SCHEMA db name TO new db name 做了坏事
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • theta 连接、等值连接和自然连接之间的区别

    当涉及到 theta 连接 等值连接和自然连接时 我无法理解关系代数 有人可以帮助我更好地理解它吗 如果我在 theta 连接上使用 符号 它与使用自然连接完全相同吗 A 西塔加入允许任意比较关系 例如 An equijoin是使用相等运算
  • 插入具有多个值的外键

    我想知道 是否有可能创建一个表 其中我有一个接受外键但同一行可能有多个值的表 例如 Employee id name skillid Skill Skillid skillname 这里 Employee 的一个例子可以是 Employee
  • 什么是“数据库实体”以及哪些类型的 DBMS 项目被视为实体? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 就SQL注入而言,哪种sql查询更安全

    我有两个 SQL 查询正在尝试更新sup and opp每次调用查询时 值分别为 1 和 1 第一个查询 query update disc set sup sup opp opp where did did int sup getnoof
  • 客户端应用程序立即对数据库中的更新做出反应的最佳方式是什么?

    对数据库中的数据更新做出立即反应的最佳方法是什么 我能立即想到的最简单的方法是一个线程 它检查数据库中某些数据的特定更改 并持续等待在某个预定义的时间长度内再次检查它 这个解决方案对我来说似乎是浪费和次优的 所以我想知道是否有更好的方法 我
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1
  • MongoDB 支持浮点类型吗?

    我正在将 mysql 数据库迁移到 mongodb 但我读过 MongoDb 数据类型 然后没有引用浮点类型 如 float double decimal 我如何在 mysql 模式中拥有一些带有十进制类型的字段 我该怎么做或我能做什么 M
  • 连接所有 PostgreSQL 表并创建 Python 字典

    我需要加入allPostgreSQL 表并将它们转换为 Python 字典 数据库中有72张表 总列数大于1600 我编写了一个简单的 Python 脚本 该脚本连接多个表 但由于以下原因无法连接所有表内存错误 https gist git
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • Postgres 从 10 升级到 12:pg_upgrade 由于存在所需库而失败

    usr pgsql 12 bin pg upgrade gt b usr pgsql 1 pgsql 10 pgsql 12 gt b usr pgsql 10 bin gt B usr pgsql 12 bin gt d var lib

随机推荐

  • PyTorch实现Logistic Regression

    1 PyTorch基础实现Logistic regression import torch from torch autograd import Variable torch manual seed 2 x data Variable to
  • Python in Visual Studio Code 2023年9月更新

    作者 Courtney Webster Program Manager Python Extension in Visual Studio Code 排版 Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Py
  • 黑白图片上色算法

    效果图 Marked B W image Result Marked B W image Result Marked B W image Result Marked B W i
  • win10 系统锁屏壁纸的目录

    路径 C Users 你自己的用户名 AppData Local Packages Microsoft Windows ContentDeliveryManager cw5n1h2txyewy LocalState Assets 查看 需要
  • 使用php简单网页抓取和内容分析,PHP抓取及分析网页的方法详解

    本文实例讲述了PHP抓取及分析网页的方法 分享给大家供大家参考 具体如下 抓取和分析一个文件是非常简单的事 这个教程将通过一个例子带领你一步一步地去实现它 让我们开始吧 首先 我首必须决定我们将抓取的URL地址 可以通过在脚本中设定或通过
  • python 去除所有的中文 英文标点符号

    去除英文标点符号 python的string模块下的 punctuation 包含所有的英文标点符号 所以用replace 一下就可以去除 代码示例 import string stri today is friday so happy p
  • MacOS中清除原有ssh公钥方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 用ssh的跳转登录服务器后 ssh会把你每个你访问过计算机的公钥 public key 都记录在 ssh known hosts 当下次访问相同计算机时 SSH会核对公钥
  • smbms 获取角色操作,角色管理实现

    为了我们职责统一 可以把角色的操作单独放在一个包中 和pojo中的对应 RoleDao 接口 package com Li dao role import com Li pojo Role import java sql Connectio
  • 数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

    树的概念 首先 树是一种常用的非线性数据结构 是以边 Edge 相连的节点 Node 的集合 每个节点存储对应的值 当存在子节点时与之相连 根节点 是树的首个节点 边 所有节点都由边相连 用于标识节点间的关系 叶子结点 树的末端节点 它们没
  • 10讲学会C语言之第五讲:函数

    文章目录 前言 一 计算圆柱体积 二 数字金字塔 三 结构化程序设计 四 复数运算 五 作业 前言 大家好 我是卷卷 本节课是第五讲 函数 本节课主要有这五个部分 计算圆柱体积 数字金字塔 结构化程序设计 复数运算 作业 文末附课程资源和讨
  • ajax.beginform json,javascript - How to use Ajax.BeginForm MVC helper with JSON result? - Stack Over...

    I m trying to use the ASP NET MVC Ajax BeginForm helper but don t want to use the existing content insertion options whe
  • Kotlin与Java互操作要注意的问题

    个人使用Kotlin开发也有一年了 一直想总结一下Kotlin和Java互相操作要注意的问题 偶然看到一篇总结不错的文章就直接搬运过来了 前言 目前kotlin是谷歌首推的开发Android的语言 但由于历史原因 我们绝大部分项目依旧还是以
  • 04 Linux Shell 文件描述符 及 stdin stdout stderr 重定向

    Abstract 1 Linux Shell 命令的标准输入 标准输出 标准错误 及其重定位 2 Linux Shell 操作自定义文件描述符 文件描述符是与文件相关联的一些整数 他们保持与已打开文件的关联 众所周知的文件描述符是标准输入s
  • 数据结构双链表之(三)按值插入&&寻找&&求长度

    文章目录 1 思路 1 1 按值插入 1 2 寻找 1 3 求长度 2 代码 2 1 DList h 2 2 DList cpp 2 3 main cpp 3 结果 3 1 按值插入 3 2 寻找 3 3 求长度 1 思路 1 1 按值插入
  • Java中的List接口

    文章目录 前言 一 什么是List 二 List常见接口介绍 三 List的使用 总结 前言 以实践为线索 逐步深入数据结构和算法 提升编程能力和思维能力 一 什么是List 在集合框架中 List是一个接口 继承自Collection C
  • git 新添加一个项目

    如何将一个新的项目放到制定的git地址上 1 创建一个项目 2 在githup上添加一个仓库 3 在命令行模式下 在指定的目录下 git init 此处需要修改一下ignore文件 git remote add origin https g
  • jvm之栈、堆

    1 Java Virtual Machine 人群当中 一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌 就在此时 c老头和c 老头缓步走来 看着被众人围住的java c老头感叹地对着身旁的c 说道 原以为你就可以挑起我的梁
  • 反斜杠“\”与斜杠“/” 的区别

    与 的区别为 用途不同 系统不同 网址不同 一 用途不同 1 只能用来表示目录 2 技能作为除法符号或者间隔符号使用 也能用来表示目录 二 系统不同 1 用作目录时 适用于windows系统 2 用作目录时 适用于unix系统 也可用于wi
  • Kali安装配置中的一些小细节

    整理文档时 找到了一年前的一些文档 零零散散 在其中看到了一篇在初学kali时写的注意点 我根据更新做了一些修改 都适用于kali最新版 希望能帮助一些自学 初学者比当年的我更快弄懂 Ubuntu系统学习 主机名 kali name rid
  • Tcl-10. 字符串比较,匹配,替换,类别,映射,string 相关

    一 字符串比较 string compare string equal 我们在 expr 和控制语句如 if while 中可用比较运算符 等来进行字符串比较 但是如不注意的话就会产生问题 首先必须用双引号来将字符串值括起来 这样表达式语法