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

.

.

名称

regsub - 基于正则表达式模式匹配完成替换操作

语法

regsub ? switches? exp string subSpec ? varName?

描述

这个命令对 string进行正则表达匹配,然后把字符串拷贝进入 varName中,如果没有 varName则将字符串返回。(正则表达式语法匹配描述在 re_syntax中。)如果匹配成功,就把匹配的部分换成 subSpec后再拷贝到 varName中,如果 subSpec包含"&"和"/0",将会替换为匹配的字符串,如果包含"/n"将被替换为字模式匹配的字符串,多添加一个反斜杠将会阻止解释其去解释"&"、"/0"、"/n"和"/",为了防止这些情况发生,把 subSpec放入花括号中会更加安全。

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

-all
在字符串中符合使正则表达式的部分全部被匹配并且全部会被替换,没有这个可选项就只有第一个匹配的字符串会被替换。在 -all选项下,所有匹配的字符串都会分别根据匹配情况进行"&"和"/n"的替代。
-expanded
使正则表达式使用扩展语法,空格键和注释会被忽略,与指定了 (?x)嵌入选项相同(参见 re_syntax帮助手册)。
-line
换行符敏感。换行符是字符串的结束符,如果使用了这个标志位, [^.不会匹配换行符,如果有换行,那么 ^$匹配一个空字符串,这个标志为相当于同时指定了 -linestop-lineanchor,与(?n)嵌入选项相同(参见 re_syntax帮助手册)。
-linestop
使 [^.不会匹配换行符,与 (?p)嵌入选项相同(参见 re_syntax帮助手册)。
-lineanchor
使 ^$的行为改变为面向行的方式,与 (?w)嵌入选项相同(参见 re_syntax帮助手册)。
-nocase
是大写字母也被当作小写来处理,相当于不区分大小写字符。
-start index
指定了开始匹配的索引位置,当使用了这个可选项, ^不会从字符串的开头匹配,而是从指定的索引位置开始匹配。
--
指示可选项的结束,这个可选项主要用于 exp以-开头的时候。

如果提供了varName,这个命令将返回匹配和替换的数量,不提供则返回替换后的字符串,参见regexp命令以了解更多信息。

示例

使用 bar替代字符串中所有的 foo
regsub -all {/<foo/>} $string bar string

使用双引号把匹配的字符串括起来:

regsub -nocase {/<interesting/>} $string {"&"} string

通过regsubsubst命令把所有非ASCII和Tcl特殊意义的字符使用/u转义:

# 这个正则表达式是所有“非法”字符的字符集
set RE {[][{};#///$/s/u0100-/uffff]}

# 替换一个中括号中的tcl命令
set substitution {[format ////u%04x [scan "//&" %c]]}

# 将命令传给subst使format命令得到替换
set quoted [subst [regsub -all $RE $string $substitution]]
 

你可能感兴趣的:(c,正则表达式,String,扩展,Tcl)