2010年5月11日星期二

转载:VIM 正则表达式替换果然方便

http://zecy.blog.hexun.com/45576642_d.html
正则表达式,哥的痛.....

昨天写的那篇心得中,本来是计划发在BBS的,因此写的时候就加了BBcode。之后发现,显示时网 址没有下划线,得加[u]下划线标签才行。网址是这样写的

[url=xxxxxx]xxxxx[/url]

要加下划线得 写成这样

[url=xxxxxxx][u]xxxxxx[/u][/url]

那么多的网址,要人手加就太麻烦了。当初用 上vim就是为了在这种情况下能有个简便方法的,那就用vim解决吧。查了一些资料,替换语句是要这样写的:

%s/\]\zs.*\ze\[\/url\]/\[u\]&\[\/u\]/gc

替换语句的结构是这样的:s/aaa/bbb/[i] [g][c]。这个句子的意思就是,把“aaa”替换为“bbb”。中括号内的是一些参数。
%s,代表替换。“%”意思是全文查找替换内容。还可以有其 他灵活的写法,替换任意位置的内容。
/,分隔符,用于分隔不同的元素
绿色部分就是被 替换内容,看起来很复杂,这是正则表达式的缺点,可读性很差。现在来各个部分分解来看。
\]:由于中括号在正则表达式中是有意义的,因此要搜索中 括号本身,需要添加“\”。这里的意思就是查找“]”。其他“\”都是一样的作用。
\zs,\ze:用于标注匹配部分。比如,aaaa,要换中间 两个a,就这样写:%s/a\zsaa\zea/bb,结果就是abba。
.*:意思是匹配任意长度的字符,这里用意 是匹配“]”和“[/url]”中的所有内容。
&:代表被替换内容。比如:s/aaaa/bb&bb,结果就是 bbaaaabb。
gc:这是两个参数的组合,g和c。g的意思是,匹配到行末。比如一行:aaaa,aaaa,aaaa。s/aaaa/bb&bb这个语句只能替换第一 个aaaa,要加上g后,才能把全部aaaa换掉。c的意思是替换前询问,s指令不熟练的时候最好加上。

沒有留言:

發佈留言