regsub - 基于正则表达式模式匹配完成替换操作
regsub -switches {exp} string {subSpec} varName
这个命令对string进行正则表达匹配,然后把字符串拷贝进入varName中,如果没有varName则将字符串返回。(正则表达式语法匹配描述在re_syntax中。)如果匹配成功,就把匹配的部分换成subSpec后再拷贝到varName中,如果subSpec包含"&"和"\0",将会替换为匹配的字符串,如果包含"\n"将被替换为字模式匹配的字符串,多添加一个反斜杠将会阻止解释其去解释"&"、"\0"、"\n"和"\",为了防止这些情况发生,把subSpec放入花括号中会更加安全。
如果紧接着regexp的第一个变元以-开头,那么就会被当作可选项来处理,可以使用的选项如下:
-
- 在字符串中符合使正则表达式的部分全部被匹配并且全部会被替换,没有这个可选项就只有第一个匹配的字符串会被替换。在-all选项下,所有匹配的字符串都会分别根据匹配情况进行"&"和"\n"的替代。
-
- 使正则表达式使用扩展语法,空格键和注释会被忽略,与指定了(?x)嵌入选项相同(参见re_syntax帮助手册)。
-
- 换行符敏感。换行符是字符串的结束符,如果使用了这个标志位,[^和.不会匹配换行符,如果有换行,那么^和$匹配一个空字符串,这个标志为相当于同时指定了-linestop和-lineanchor,与(?n)嵌入选项相同(参见re_syntax帮助手册)。
-
- 使[^和.不会匹配换行符,与(?p)嵌入选项相同(参见re_syntax帮助手册)。
-
- 使^和$的行为改变为面向行的方式,与(?w)嵌入选项相同(参见re_syntax帮助手册)。
-
- 是大写字母也被当作小写来处理,相当于不区分大小写字符。
-
- 指定了开始匹配的索引位置,当使用了这个可选项,^不会从字符串的开头匹配,而是从指定的索引位置开始匹配。
-
- 指示可选项的结束,这个可选项主要用于exp以-开头的时候。
如果提供了varName,这个命令将返回匹配和替换的数量,不提供则返回替换后的字符串,参见命令以了解更多信息。
使用bar替代字符串中所有的foo:
regsub -all {\} $string bar string
使用双引号把匹配的字符串括起来:
regsub -nocase {\} $string {"&"} string
通过regsub和subst命令把所有非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]]
阅读(10668) | 评论(0) | 转发(0) |