潮白河社区网

潮白河社区
北三县区域最大的社区服务网站!
查看: 1650|跟帖: 2
打印 上一主题 下一主题

[IT技术] Vim正则表达式 文档及使用介绍

[复制链接]

1545

主题

3923

帖子

4301

潮白币

站长

Rank: 9

UID
1
积分
24458

优秀版主最佳新人

会员类型
业主
小区名称
温莎郡
小区楼号
10号楼 1单元
跳转到指定楼层
楼主
发表于 2015-3-3 15:27:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作。http://news.chaobaihe.net 潮白新闻网

http://bbs.chaobaihe.net 潮白河社区网如果你比较熟悉Perl的正规表达式,可以直接参照与Perl正则表达式的区别一节。http://house.chaobaihe.net 潮白房产网
http://news.chaobaihe.net 潮白新闻网
一、使用正则表达式的命令http://bbs.chaobaihe.net 潮白河社区网
http://news.chaobaihe.net 潮白新闻网
使用正则表达式的命令最常见的就是 / (搜索)命令。其格式如下:
http://house.chaobaihe.net 潮白房产网http://bbs.chaobaihe.net 潮白河社区网
/正则表达式本文章来源于潮白家园网: http://www.chaobaihe.net
另一个很有用的命令就是 :s(替换)命令,将第一个//之间的正则表达式替换成第二个//之间的字符串。本文章来源于潮白家园网: http://www.chaobaihe.net
http://house.chaobaihe.net 潮白房产网
:s/正则表达式/替换字符串/选项
http://news.chaobaihe.net 潮白新闻网在学习正则表达式时可以利用 / 命令来练习。http://fj.chaobaihe.net 潮白河点评网
http://house.chaobaihe.net 潮白房产网
二、元字符
http://news.chaobaihe.net 潮白新闻网http://fj.chaobaihe.net 潮白河点评网
元字符是具有特殊意义的字符。使用元字符可以表达任意字符、行首、行 尾、某几个字符等意义。
http://fj.chaobaihe.net 潮白河点评网
http://house.chaobaihe.net 潮白房产网元字符一览
http://house.chaobaihe.net 潮白房产网http://house.chaobaihe.net 潮白房产网
元字符        说明http://house.chaobaihe.net 潮白房产网
.        匹配任意一个字符本文章来源于潮白家园网: http://www.chaobaihe.net
[abc]        匹配方括号中的任意一个字符。可以使用-表示字符范围,
本文章来源于潮白家园网: http://www.chaobaihe.net如[a-z0-9]匹 配小写字母和阿拉伯数字。http://house.chaobaihe.net 潮白房产网
[^abc]        在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。http://bbs.chaobaihe.net 潮白河社区网
\d        匹配阿拉伯数字,等同于[0-9]。http://house.chaobaihe.net 潮白房产网
\D        匹配阿拉伯数字之外的任意字符,等同于[^0-9]。http://house.chaobaihe.net 潮白房产网
\x        匹配十六进制数字,等同于[0-9A-Fa-f]。http://bbs.chaobaihe.net 潮白河社区网
\X        匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]。
http://house.chaobaihe.net 潮白房产网\w        匹配单词字母,等同于[0-9A-Za-z_]。http://fj.chaobaihe.net 潮白河点评网
\W        匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
http://news.chaobaihe.net 潮白新闻网\t        匹配<TAB>字符。http://news.chaobaihe.net 潮白新闻网
\s        匹配空白字符,等同于[ \t]。http://house.chaobaihe.net 潮白房产网
\S        匹配非空白字符,等同于[^ \t]。
本文章来源于潮白家园网: http://www.chaobaihe.net另外,如果要查找字符 *、.、/等,则需要在前面用 \ 符号,表示这不是元字符,而只是普通字符而已。
http://news.chaobaihe.net 潮白新闻网http://bbs.chaobaihe.net 潮白河社区网
元字符        说明
http://fj.chaobaihe.net 潮白河点评网\*        匹配 * 字符。
http://fj.chaobaihe.net 潮白河点评网\.        匹配 . 字符。http://fj.chaobaihe.net 潮白河点评网
\/        匹配 / 字符。
http://bbs.chaobaihe.net 潮白河社区网\\        匹配 \ 字符。http://fj.chaobaihe.net 潮白河点评网
\[        匹配 [ 字符。
http://news.chaobaihe.net 潮白新闻网表示数量的元字符http://house.chaobaihe.net 潮白房产网
http://house.chaobaihe.net 潮白房产网
元字符        说明
http://fj.chaobaihe.net 潮白河点评网*        匹配0-任意个
http://bbs.chaobaihe.net 潮白河社区网\+        匹配1-任意个
http://house.chaobaihe.net 潮白房产网\?        匹配0-1个
本文章来源于潮白家园网: http://www.chaobaihe.net\{n,m}        匹配n-m个
http://fj.chaobaihe.net 潮白河点评网\{n}        匹配n个
http://fj.chaobaihe.net 潮白河点评网\{n,}        匹配n-任意个http://house.chaobaihe.net 潮白房产网
\{,m}        匹配0-m个
http://bbs.chaobaihe.net 潮白河社区网表示位置的符号http://fj.chaobaihe.net 潮白河点评网

本文章来源于潮白家园网: http://www.chaobaihe.net元字符        说明本文章来源于潮白家园网: http://www.chaobaihe.net
$        匹配行尾http://news.chaobaihe.net 潮白新闻网
^        匹配行首
本文章来源于潮白家园网: http://www.chaobaihe.net\<        匹配单词词首
http://fj.chaobaihe.net 潮白河点评网\>        匹配单词词尾http://news.chaobaihe.net 潮白新闻网
使用例
http://house.chaobaihe.net 潮白房产网
http://house.chaobaihe.net 潮白房产网/char\s\+[A-Za-z_]\w*;                 " 查找所有以char开头,之后是一个以上的空白,http://bbs.chaobaihe.net 潮白河社区网
                                             " 最后是一个标识符和分号
http://news.chaobaihe.net 潮白新闻网/\d\d:\d\d:\d\d                        " 查找如 17:37:01 格式的时间字符串http://bbs.chaobaihe.net 潮白河社区网
:g/^\s*$/d                             " 删除只有空白的行http://bbs.chaobaihe.net 潮白河社区网
:s/\<four\>/4/g                        " 将所有的four替换成4,但是fourteen中的four不替换
http://bbs.chaobaihe.net 潮白河社区网三、替换变量本文章来源于潮白家园网: http://www.chaobaihe.net

http://fj.chaobaihe.net 潮白河点评网在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2 等变量来访问 \( 和 \) 中的内容。
本文章来源于潮白家园网: http://www.chaobaihe.nethttp://news.chaobaihe.net 潮白新闻网
使用例http://bbs.chaobaihe.net 潮白河社区网
http://news.chaobaihe.net 潮白新闻网
/\(a\+\)[^a]\+\1                                          " 查找开头和结尾处a的个数相同的字符串,
http://fj.chaobaihe.net 潮白河点评网                                                                  " 如 aabbbaa,aaacccaaa,但是不匹配 abbbaahttp://fj.chaobaihe.net 潮白河点评网
:s/\(http:\/\/[-a-z\._~\+%\/]\+\)/<a href="\1">\1<\/a>/   " 将URL替换为<a href="http://url">http://url</a>的格式
http://house.chaobaihe.net 潮白房产网:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1                            " 将 data1 data2 修改为 data2 data1http://news.chaobaihe.net 潮白新闻网
四、函数式本文章来源于潮白家园网: http://www.chaobaihe.net
http://bbs.chaobaihe.net 潮白河社区网
在替换命令 s/// 中可以使用函数表达式来书写替换内容,格式为http://house.chaobaihe.net 潮白房产网
本文章来源于潮白家园网: http://www.chaobaihe.net
:s/替换字符串/\=函数式本文章来源于潮白家园网: http://www.chaobaihe.net
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。
http://fj.chaobaihe.net 潮白河点评网
http://bbs.chaobaihe.net 潮白河社区网使用例
http://bbs.chaobaihe.net 潮白河社区网
http://house.chaobaihe.net 潮白房产网:%s/\<id\>/\=line(".")                              " 将各行的 id 字符串替换为行号
本文章来源于潮白家园网: http://www.chaobaihe.net:%s/^\<\w\+\>/\=(line(".")-10) .".". submatch(1)    " 将每行开头的单词替换为 (行号-10).单词 的格式,
http://news.chaobaihe.net 潮白新闻网                                                           " 如第11行的 word 替换成 1. wordhttp://news.chaobaihe.net 潮白新闻网
五、与Perl正则表达式的区别http://bbs.chaobaihe.net 潮白河社区网

http://bbs.chaobaihe.net 潮白河社区网元字符的区别
http://bbs.chaobaihe.net 潮白河社区网
本文章来源于潮白家园网: http://www.chaobaihe.netVim语法        Perl语法        含义http://news.chaobaihe.net 潮白新闻网
\+        +        1-任意个http://news.chaobaihe.net 潮白新闻网
\?        ?        0-1个http://news.chaobaihe.net 潮白新闻网
\{n,m}        {n,m}        n-m个
http://bbs.chaobaihe.net 潮白河社区网\(和\)        (和)        分组http://fj.chaobaihe.net 潮白河点评网
http://fj.chaobaihe.net 潮白河点评网
六、vi 正则表达式练习
http://news.chaobaihe.net 潮白新闻网http://fj.chaobaihe.net 潮白河点评网
闲言碎语不要讲…例子说明一切,比如下面这段我需要换成 ubb 标签
本文章来源于潮白家园网: http://www.chaobaihe.net
http://house.chaobaihe.net 潮白房产网vim 命令模式,输入http://fj.chaobaihe.net 潮白河点评网
http://news.chaobaihe.net 潮白新闻网
  1. :%s/.*src=”([^"]*)”[^>]*>/[img]1[/img]/g
复制代码
本文章来源于潮白家园网: http://www.chaobaihe.net
http://house.chaobaihe.net 潮白房产网
替换为http://fj.chaobaihe.net 潮白河点评网
http://fj.chaobaihe.net 潮白河点评网
  1. [img ]gu.jpg[ /img]
    http://fj.chaobaihe.net 潮白河点评网

  2. http://news.chaobaihe.net 潮白新闻网
  3. [img ]os.jpg[ /img]
    http://house.chaobaihe.net 潮白房产网
  4. 本文章来源于潮白家园网: http://www.chaobaihe.net
  5. [img ]hu.jpg[ /img]
    http://house.chaobaihe.net 潮白房产网
  6. http://bbs.chaobaihe.net 潮白河社区网
  7. [img ]ang.jpg[ /img]
复制代码

http://news.chaobaihe.net 潮白新闻网http://news.chaobaihe.net 潮白新闻网
解释如下:
http://news.chaobaihe.net 潮白新闻网
http://news.chaobaihe.net 潮白新闻网:http://house.chaobaihe.net 潮白房产网
http://news.chaobaihe.net 潮白新闻网
命令执行状态
本文章来源于潮白家园网: http://www.chaobaihe.nethttp://fj.chaobaihe.net 潮白河点评网
%s本文章来源于潮白家园网: http://www.chaobaihe.net

http://fj.chaobaihe.net 潮白河点评网表示查找并替换
http://house.chaobaihe.net 潮白房产网http://bbs.chaobaihe.net 潮白河社区网
%s/a/b/g
http://house.chaobaihe.net 潮白房产网
http://house.chaobaihe.net 潮白房产网a 被查找的字符串(正则匹配);b 要替换成的文字;g 表示全局搜索替换(否则只处理找到的第一个结果)http://bbs.chaobaihe.net 潮白河社区网

http://house.chaobaihe.net 潮白房产网([^"]*)本文章来源于潮白家园网: http://www.chaobaihe.net

http://news.chaobaihe.net 潮白新闻网表示非引号的字符N个;外面 () 表示后面替换要用(用 1,…,9等引用)
本文章来源于潮白家园网: http://www.chaobaihe.net
http://news.chaobaihe.net 潮白新闻网[/img]http://bbs.chaobaihe.net 潮白河社区网

http://bbs.chaobaihe.net 潮白河社区网/ 需要被 转义http://bbs.chaobaihe.net 潮白河社区网
本文章来源于潮白家园网: http://www.chaobaihe.net
与其它工具正则不一样的地方在于 () 也必须 (),怪不得我老是弄不出来。本文章来源于潮白家园网: http://www.chaobaihe.net

http://bbs.chaobaihe.net 潮白河社区网相关资料:
本文章来源于潮白家园网: http://www.chaobaihe.net
http://news.chaobaihe.net 潮白新闻网via http://net.pku.edu.cn/~yhf/tao_regexps_zh.html
http://house.chaobaihe.net 潮白房产网本文章来源于潮白家园网: http://www.chaobaihe.net
vi 命令 作用
本文章来源于潮白家园网: http://www.chaobaihe.net
http://bbs.chaobaihe.net 潮白河社区网:%s/ */ /g 把一个或者多个空格替换为一个空格。
http://news.chaobaihe.net 潮白新闻网
http://news.chaobaihe.net 潮白新闻网:%s/ *$// 去掉行尾的所有空格。
http://news.chaobaihe.net 潮白新闻网http://bbs.chaobaihe.net 潮白河社区网
:%s/^/ / 在每一行头上加入一个空格。
本文章来源于潮白家园网: http://www.chaobaihe.net
http://house.chaobaihe.net 潮白房产网:%s/^[0-9][0-9]* // 去掉行首的所有数字字符。http://news.chaobaihe.net 潮白新闻网

本文章来源于潮白家园网: http://www.chaobaihe.net:%s/b[aeio]g/bug/g 将所有的bag、beg、big和bog改为bug。
http://news.chaobaihe.net 潮白新闻网
本文章来源于潮白家园网: http://www.chaobaihe.net:%s/t([aou])g/h1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用1引用前面被匹配的字符)。http://house.chaobaihe.net 潮白房产网
本文章来源于潮白家园网: http://www.chaobaihe.net
Sed
http://house.chaobaihe.net 潮白房产网
http://fj.chaobaihe.net 潮白河点评网Sed是Stream EDitor的缩写,是Unix下常用的基于文件和管道的编辑工具,可以在手册中得到关于sed的详细信息。http://bbs.chaobaihe.net 潮白河社区网
http://news.chaobaihe.net 潮白新闻网
这里是一些有趣的sed脚本,假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件,sed只是处理源文件的每一行并 把结果显示在标准输出中(当然很容易使用重定向来定制):
http://bbs.chaobaihe.net 潮白河社区网http://news.chaobaihe.net 潮白新闻网
sed脚本 描述
http://fj.chaobaihe.net 潮白河点评网http://fj.chaobaihe.net 潮白河点评网
sed ’s/^$/d’ price.txt 删除所有空行http://fj.chaobaihe.net 潮白河点评网
http://house.chaobaihe.net 潮白房产网
sed ’s/^[ ]*$/d’ price.txt 删除所有只包含空格或者制表符的行
http://bbs.chaobaihe.net 潮白河社区网
http://house.chaobaihe.net 潮白房产网sed ’s/”//g’ price.txt 删除所有引号
http://bbs.chaobaihe.net 潮白河社区网
http://bbs.chaobaihe.net 潮白河社区网原文地址:http://www.cppblog.com/kefeng/archive/2010/10/20/130574.aspx?opt=admin
http://house.chaobaihe.net 潮白房产网http://house.chaobaihe.net 潮白房产网
分享到: 0

66

主题

617

帖子

310

潮白币

版主

Rank: 7Rank: 7Rank: 7

UID
242
积分
1886

最佳新人诚信勋章优秀版主荣誉管理

沙发
发表于 2015-3-3 18:08:11 | 只看该作者
技术大牛啊你就是!!!
http://fj.chaobaihe.net 潮白河点评网
  收起(1)
跟帖

使用道具 评分 举报

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表