regexp tcl(TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1)

本文目录
- TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1
- regsub 命令
- tcl 脚本中如何读取txt文件内容总行数后作为变量使用
- tcl 正则表达式循环匹配
- tcl中正则表达式的匹配问题
- 有关Tcl脚本语言编程的问题
- tcl列表操作lsearch
TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1
1 list命令
语法: list ? value value...?
这个命令生成一个list,list的元素就是所有的value。例:
% list 1 2 {3 4}
1 2 {3 4}
concat命令:
语法:concat list ?list...?
这个命令把多个list合成一个list,每个list变成新list的一个元素。
3 lindex命令
语法:lindex list index
返回list的第index个(0-based)元素。例:
% lindex {1 2 {3 4}} 2
3 4
4 llength命令
语法:llength list
返回list的元素个数。例
% llength {1 2 {3 4}}
3
5 linsert命令
语法:linsert list index value ?value...?
返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。例:
% linsert {1 2 {3 4}} 1 7 8 {9 10}
1 7 8 {9 10} 2 {3 4}
6 lreplace命令:
语法:lreplace list first last ?value value ...?
返回一个新串,新串是把list的第firs (0-based)t到第last 个(0-based)元素用所有的value参数替换得到的。如果没有value参数,就表示删除第first到第last个元素。例:
% lreplace {1 7 8 {9 10} 2 {3 4}} 3 3
1 7 8 2 {3 4}
% lreplace {1 7 8 2 {3 4}} 4 4 4 5 6
1 7 8 2 4 5 6
7 lrange 命令:
语法:lrange list first last
返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。
例:
% lrange {1 7 8 2 4 5 6} 3 end
2 4 5 6
8 lappend命令:
语法:lappend varname value ?value...?
把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。例:
% lappend a 1 2 3
1 2 3
% set a
1 2 3
9 lsearch 命令:
语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern
返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。-exact、-glob、 -regexp是三种模式匹配的技术。-exact表示精确匹配;-glob的匹配方式和string match命令的匹配方式相同,将在后面第八节介绍string命令时介绍;-regexp表示正规表达式匹配,将在第八节介绍regexp命令时介绍。缺省时使用-glob匹配。例:
% set a { how are you }
how are you
% lsearch $a y*
2
% lsearch $a y?
-1
10 lsort命令:
语法:lsort ?options? list
这个命令返回把list排序后的串。options可以是如下值:
-ascii 按ASCII字符的顺序排序比较.这是缺省情况。
-dictionary 按字典排序,与-ascii不同的地方是:
(1)不考虑大小写
(2)如果元素中有数字的话,数字被当作整数来排序.
因此:bigBoy排在bigbang和bigboy之间, x10y 排在x9y和x11y之间.
-integer 把list的元素转换成整数,按整数排序.
-real 把list的元素转换成浮点数,按浮点数排序.
-increasing 升序(按ASCII字符比较)
-decreasing 降序(按ASCII字符比较)
-command command TCL自动利用command 命令把每两个元素一一比较,然后给出排序结果。
11 split命令:
语法:split string ?splitChars?
把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars
是一个空字符{},string被按字符分开。如果splitChars没有给出,以空格为分隔符。例:
% split "how.are.you" .
how are you
% split "how are you"
how are you
% split "how are you" {}
h o w { } a r e { } y o u
12 join命令
语法:join list ?joinString?
join命令是命令的逆。这个命令把list的所有元素合并到一个字符串中,中间以joinString分开。缺省的joinString是空格。例:
% join {h o w { } a r e { } y o u} {}
how are you
% join {how are you} .
how.are.you
regsub 命令
在TCL中可以使用命令regsub通过正则表达式进行字符串替换。命令格式如下:
regsub ?switches? exp string subSpec?varName?
例如:
regsub there "They live therelives" their x
→1
regsub的第一个参数是正则表达式模式,第二个参数是输入字符串,与regexp相同。而且,与 regexp相似, regsub返回1代表字符串与模式匹配,返回0代表不匹配。它还可以把匹配的子字符串替换为指定的替换字符串,从而创建一个新的字符串。替换字符串就是 regsub的第三个参数, 最后一个参数是存放这个新的字符串的变量名。因此,在上面这个命令完成后,x的值为They live their lives。如果字符串不能与模式匹配,则会返回0,x的值为They live there lives (无论是否发生替换,都会设置这个变量)。
在正则表达式参数之前,还可以提供一个或多个选项, regexp支持的很多选项在regsub中也可用。通常regsub只进行简单的替换,替换掉输入字符串中最先出现的匹配项。然而,如果指定了-al选项, regsub就会继续查找,直到把所有的匹配项都加以替换,然后它会返回替换的次数。例如,执行以下命令:
regsub -all a ababa zz x
x的值为zzbzzbzz。如果没有-all选项,x的值为 zzbaba。
-nocase选项要求在模式中的字母原子进行匹配时不区分大小写。-start命令指定字符串中一个字符的索引,从指定字符处开始查找匹配。-line选项启动区分换行的匹配,和regexp相同。可以使用--来明确地标记命令选项结束。
如果替换字符串包含&或\0,其中的&或\0会被替换为与正则表达式相匹配的子字符串。如是\n形式的序列出现在置换字符串中(n是一个十进制数),与第n个捕获的子表达式相匹配的子字符串会替换掉这个\n.
例如,以下命令会把输入字符串中所有的a和b都写两遍。
regsub -all -- a|b axaab && x
这里它把x赋值为 aaxaaaabb。另外,以下命令会把后面有一个b而前面没有一个b的a的序列替换为一个z.
regsub –all -- (a+)(ba*) aabaabxab {z\2} x
这里ⅹ被赋值为zbaabxzb。反斜线可以用来代入有特殊含义的字符,避免解释器对它们进行特殊处理.
tcl 脚本中如何读取txt文件内容总行数后作为变量使用
首先指出一个BUG," close $b "应该放在
while { != -1 } {
...
close $b
}
否则会资源泄露。
文件b的从行数可以统计换行符获得。不知道你想要统计文件b的行数替代什么? 我的意思是,从你的程序中看不出为什么要统计b的从行数。当if {} 条件始终不成立时,flag的值正好是b的总行数。
tcl 正则表达式循环匹配
虽然Tcl我不会,但是我有个想法不知道能不能帮上楼主。
在perl中/g并不是一次就全部匹配的,而是从上次匹配的结束处开始尝试新的匹配。
猜测Tcl也行
你看看这样行不行(我不会Tcl语法,就当c写了)
while($num)
{
puts
i++
}
tcl中正则表达式的匹配问题
像+ * ? 以及{M,N}
这几种量词(匹配数量)默认是属于贪婪量词,进行贪婪匹配
什么叫做贪婪匹配呢?贪婪就是尽可能的多匹配,贪心的意思
比如现在目标字符串是 AAAA 四个A组成的字符串
A* 和 A+ 都会匹配 AAAA
A? 则会匹配 A
这就是贪婪匹配,实际运用中,有的时候我们却希望尽可能少的匹配
比如目标字符串 《span》a《/span》《span》b《/span》
此时如果我们使用了贪婪量词
《span》.*《/span》 则会匹配 《span》a《/span》《span》b《/span》 整个字符串
可是我们只想要匹配第一对span标签怎么办?此时就需要用到懒惰量词,意思也很明显了,能偷懒就偷懒,呵呵,懒惰量词与贪婪量词的差别就是在贪婪量词的后面加个?号,就构成了懒惰量词,如下表
贪婪量词 懒惰量词
A* A*?
A+ A+?
A? A??
A A?
还是以目标字符串 AAAA 来讨论
A*?
*号是匹配0次或多次,要偷懒怎么办呢?当然是最少次数了,也就是0 所以在这里匹配的结果是
没有匹配到任何内容
A+?
+是1次或多次,分析方法同上,最少次数是1次,所以匹配结果就是 A
A??
?是0次或1次,所以这里也不进行匹配,会偷懒吧,呵呵
再来看看刚刚的
《span》a《/span》《span》b《/span》
要匹配第一对span,用懒惰量词就是《span》.*?《/span》
我已经说的够明白了吧?这些内容我以前都是查了好多资料才知道的。
正则表达式是相当强大的语言,尤其在进行字符匹配和查找时,当然要需要花一定的时间才能掌握,如果有问题可以百度HI我,进行探讨
有关Tcl脚本语言编程的问题
set srcfile myres.res
set dstfile dtest.txt
if {} {
puts "Failed to open the source file: $srcfile; $res"
return 0
}
set hSrc $res
if {} {
puts "Failed to open the destination file: $dstfile; $res"
return 0
}
set hDst $res
foreach line {
if {} {
puts $hDst "Rise Delay is $sub1"
}
if {} {
puts $hDst "Fall Delay is $sub1"
}
}
close $hSrc
close $hDst
tcl列表操作lsearch
名称 lsearch - 在列表中寻找特定元素
语法 lsearch ? options ? list pattern
描述 这个命令寻找 list 中与 pattern 匹配的元素。如果匹配到了返回第一次找到这个元素的索引(除非指定了-all或-inline),如果没有匹配到返回-1。可选变元指出了列表的元素怎样去匹配 pattern ,可选项如下:
匹配风格可选项
默认的匹配风格为 -glob ,如果给出了多个匹配风格,那么最后给出的匹配风格有效。
-exact
pattern 是字符串并且必须严格匹配每一个 list 元素。
-glob
pattern 是通配风格匹配每一个列表元素,与 string match 命令类似。
-regexp
pattern 被当作一个正则表达式来匹配列表中的每一个元素,与 re_syntax 命令类似。
-sorted
列表元素被排序,如果指定了这个可选项, lsearch 将会使用更加有效的查询算法去查列表。如果没有指定其它的可选项, list 将被排列成升序并且包含ASCII码。这个可选项与 -glob 和 -regexp 互斥,当指定 了-all 或 -not 时与 -exact 非常象。
一般修饰可选项
这些可选项可以在任何一种匹配风格中给出。
-all
返回一个列表,列表的元素为所有匹配到的索引,返回的索引按照数字顺序排列,如果同时指定了 -inline 返回数值,数值的顺序就是在列表中的顺序。
-inline
返回匹配到的第一个元素。如果 -all 也指定了,则返回一个列表,列表的元素为所有匹配到的数值。
-not
与匹配相反,返回第一个不匹配的数值的索引。
-start index
从列表的 index 个索引开始搜索。
内容描述可选项
描述如何去解释在列表中寻找到的元素,只有当 -exact 和 -sorted 指定时才有效。如果给出了多个可选项,那么最后给出的可选项有效。默认为-ascii。
-ascii
列表元素作为Unicode字符串来检查。
-dictionary
列表元素在比较时使用字典关系(查看 lsort 以获取详细描述),只有当 -sorted 可选项指定时才有有效。
-integer
列表中的元素被当作整数来处理。
-nocase
忽略大小写。与 -dictionary 、 -integer 和 -real 搭配无效。
-real
列表中的元素被当作浮点数来处理。
列表排序可选项
这个可选项指定了列表如何排序,只有指定了 -sorted 时才有效。如果给出了多个可选项,那么最后给出的可选项有效。
-decreasing
列表元素为降序排列,只有指定了 -sorted 时才有效。
-increasing
列表元素为升序排列,只有指定了 -sorted 时才有效。
内嵌列表可选项
这些可选项被用来寻找子列表,可以与任何其它可选项一起使用。
-index indexList
这个可选项寻找内嵌的列表, indexList 变元必须给出一个索引列表(与 lindex 和 lset 类似), indexList 给出的索引列表在 list 中必须存在对应的索引,否则会出错。
-subindices
这个可选项只返回寻找到的子列表元素,必须和 -index 配合使用。
示例
基本搜索:
lsearch {a b c d e} c
→2
lsearch -all {a b c a b c} c
→2 5
过滤列表:
lsearch -inline {a20 b35 c47} b*
→b35
lsearch -inline -not {a20 b35 c47} b*
→a20
lsearch -all -inline -not {a20 b35 c47} b*
→a20 c47
lsearch -all -not {a20 b35 c47} b*
→0 2
甚至可以做切除操作:
lsearch -all -inline -not -exact {a b c a d e a f g a} a
→b c d e f g
搜索从半途开始:
lsearch -start 3 {a b c a b c} c
→5
搜索子列表中的元素:
lsearch -index 1 -all -inline {{a abc} {b bcd} {c cde}} *bc*
→{a abc} {b bcd}
***隐藏网址***

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10




