tcl/tk参考——字符串操作regexp

.

.

 

名称

regexp - 为一个字符串进行正则表达式匹配

语法

regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?

描述

如果正则表达式exp匹配上了string的部分或全部后就返回1,否则返回0。(指定了-inline后的情况如下)(正则表达式语法匹配描述在re_syntax中。)

如果指定了string后面的可选变元,那么matchVar将被赋值为于模式匹配的那部分字符串,第一个subMatchVar匹配第一个子模式匹配到的字符串,其它的以此类推。

如果紧接着regexp的第一个变元以-开头,那么就会被当作可选项来处理,可以使用的选项如下:

-about
不是去匹配正则表达式,而是返回一个包含着正则表达式信息的列表,列表的第一个元素为子表达式的个数,第二个元素为包含正则表达式各类描述信息的列表。这个可选项一般只用来作为调试使用。
-expanded
使正则表达式使用扩展语法,空格键和注释会被忽略,与指定了 (?x)嵌入选项相同(参见 re_syntax帮助手册)。
-indices
储存在 subMatchVars中的数值不再是子模式匹配的字符串,而是包含两个十进制字符串的列表,分别表示子模式字符串在原字符串中的索引位置。
-line
换行符敏感。换行符是字符串的结束符,如果使用了这个标志位, [^.不会匹配换行符,如果有换行,那么 ^$匹配一个空字符串,这个标志为相当于同时指定了 -linestop-lineanchor,与 (?n)嵌入选项相同(参见 re_syntax帮助手册)。
-linestop
使 [^.不会匹配换行符,与 (?p)嵌入选项相同(参见 re_syntax帮助手册)。
-lineanchor
使 ^$的行为改变为面向行的方式,与 (?w)嵌入选项相同(参见 re_syntax帮助手册)。
-nocase
是大写字母也被当作小写来处理,相当于不区分大小写字符。
-all
在字符串中符合使正则表达式的部分全部被匹配,返回匹配的个数,如果指定了匹配变量,那么最后一个匹配到的字符串将储存在这些变量中。
-inline
命令返回一个列表,列表元素为匹配的到的字符串和子模式匹配的字符串。如果和 -all一起使用,那么返回所有匹配到的字符串和子模式匹配的字符串。例如:
regexp -inline -- {/w(/w)} " inlined "
       in n
regexp -all -inline -- {/w(/w)} " inlined "
       in n li i ne e
-start index
指定了开始匹配的索引位置,当使用了这个可选项, ^不会从字符串的开头匹配,而是从指定的索引位置开始匹配。
--
指示可选项的结束,这个可选项主要用于 exp以-开头的时候。

如果没有subMatchVars比子模式的数量多或者子模式没有匹配到字符串,相应的subMatchVar将被设为-1,如果指定了-indices将返回一个空字符串。

示例

寻找第一个以foo开头但不是foobar的字符串并且把余下的字符存入一个变量中:

regexp {/<foo(?!bar/>)(/w*)} $string -> restOfWord

注意整个匹配的子字符串已经被放置到变量->中,这样看起来比较好看,因为我们对它的值并没有兴趣。

寻找词badger在字符串中的索引,然后存储在变量location

regexp -indices {(?i)/<badger/>} $string location

计算字符串中八进制数的个数:

regexp -all {[0-7]} $string

列出字符串中所有的词:

regexp -all -inline {/S+} $string
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值