Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1813954
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: LINUX

2010-02-03 10:35:27

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

通过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]]

阅读(10138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~