欢迎来到天天文库
浏览记录
ID:39468719
大小:37.50 KB
页数:4页
时间:2019-07-04
《TCL中的正则表达式用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、TCL中的正则表达式主要是两条命令:(1) regexp?switches?expstring?matchVar??subMatchVarsubMatchVar...?在字符串中使用正则表达式匹配。(2) regsub?switches?expstringsubSpec?varName?在字符串中基于正则表达式的替换介绍一下常用的几个switches:-all在字符串中进行全部匹配或者替换,会返回匹配或者替换的总次数。-nocase将字符串中的大写都当成小写看待。-indices存在子匹配变量中不再是字符,而是index。--表示后面不再是switches,
2、而是正则表达式的模式了,即使后面紧接着是-。例子:(bin)29%sete1{[zhou1020]}[zhou1020](bin)30%regexp{[([a-z]+)([0-9]+)]}$e1matchstringsub1sub21(bin)31%puts$matchstring[zhou1020](bin)32%puts$sub1zhou(bin)33%puts$sub21020下面解释一下:Matchstring表示用正则表示式匹配的所有字符串;Sub1表示正则表达式中的第一个子表达式(就是小括号里面的正则表达式,在这里就是([a-z]+))匹配的字符串;Sub2表示
3、正则表达式中的第二个子表达式(就是小括号里面的正则表达式,在这里就是([0-9]+))匹配的字符串;如果加上-indices,得到的是字符串的索引。(bin)34%regexp-indices{[([a-z]+)([0-9]+)]}$e1matchstringsub1sub21(bin)35%puts$matchstring09(bin)36%puts$sub114(bin)37%puts$sub258一些需要注意的地方:1. –表示后面是pattern,不再是switches了;2. regsub只能替换第一个匹配的;如果要全部替换,需要加上-
4、all选项;3. 在expect中使用正则表达式:Expect–re“a*”:当看见-re选项,就知道后面是正则表达式,这时的*表示匹配0或者多次。就是可以匹配空字符串,a,aa,aaa……注意Expect“a*”与上面的区别:默认是globalpattern模式,相当于expect–gl“a*”,这时*表示任何一个字符。这时匹配aa,ab,ac……。4. []的两种用法:(1) 表示里面是命令(2) 用在正则表达式里面,表示里面是一个范围。如[0-9],[a-zA-Z]5. ^的两种用法(1) 表示从头开始匹配
5、(2) 用在正则表达式的[]里,表示取反。如[^0-9]表示除了数字0-9之外的。6. Quantifiers量词*:表示0到多次+:表示一到多次?:表示0到一次。7. 一个容易弄错的地方.*:表示匹配任何字符串。(因为.表示任何字符,而*表示0次或者多次,故*:表示匹配任何字符串)同时,*是贪婪的,它希望得到最长的字符串。如果想关掉贪婪属性,可以在后面加?。.*\n:表示尽可能多的,以回车换行符作为结束。看下面的例子:(bin)44%seta{111122223333}111122223333(bin)45%(bin)45%regexp.*
6、$amatch1(bin)46%puts$match111122223333(bin)可以看出,它在遇到第一行结束的回车换行并没有结束,而是贪婪的匹配到了最后一个回车换行。如果只想得到第一行的1111,可以关掉*的贪婪属性。(bin)47%regexp.*?$amatch1(bin)48%puts$match1111(bin)也可以用regexp"[^]*"$amatch达到目的。(bin)49%regexp"[^]*"$amatch1(bin)50%puts$match1111(bin)51%8. backslash转义字符tab键并不是
7、有几个空格组成的。匹配单个+:两个\经过tcl解释得到一个\,\+经过正则表达式转义得到+:(bin)51%regexp"\+"{+}e11(bin)52%puts$e1+如果使用大括号,只使用一个\即可:(bin)53%regexp{+}{+}e11(bin)54%puts$e1+(bin)55%匹配单个\:使用中括号需要2个\,使用双引号,需要4个\.(bin)55%regexp{\}"\"e11(bin)56%puts$e1(bin)57%regexp"\\""\"1(
此文档下载收益归作者所有