1、正则表达式概述
正则表达式(Regular Expression,regex/regexp)是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的,用于描述要匹配的文本模式。
GVIM、TCL中都会使用到正则表达式,其中TCL中的使用方法已在之前介绍过,大家可以参考我这篇博客【数字IC-TCL语言2】
正则表达式功能很强大,可以完成很多难以想象的操作!
2、正则表达式的语法
命令 | 语法格式 |
搜索 | /正则表达式 |
替换 | :s/正则表达式/替换字符串/选项 |
- 元字符
. | 匹配任意一个字符 |
[abc] | 匹配方括号中的任意一个字符,可用-表示字符范围 如[a-z]匹配小写字母 |
[^abc] | 匹配方括号中字符之外的任意字符 |
\d | 匹配阿拉伯数字,等同于[0-9] |
\D | 匹配阿拉伯数字之外的任意字符,等同于[^0-9] |
\x | 匹配十六进制数字,等同于[0-9A-Fa-f] |
\X | 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] |
\w | 匹配单词字母,等同于[0-9A-Za-z_] |
\W | 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_] |
\t | 匹配<TAB>字符 |
\s | 匹配空白字符,等同于[ \t] |
\S | 匹配非空白字符,等同于[^ \t] |
- 表示数量的元字符
* | 匹配0个-任意个 |
\+ | 匹配1个-任意个 |
\? | 匹配0个-1个 |
\{n,m} | 匹配n-m个 |
\{n} | 匹配n个 |
\{n,} | 匹配n个-任意个 |
\{,m} | 匹配0-m个 |
- 特殊字符(反斜杠 \ 代表转译)
\* | 匹配 * 字符 |
\. | 匹配 . 字符 |
\/ | 匹配 / 字符 |
\\ | 匹配 \ 字符 |
\[ | 匹配 [ 字符 |
- 表示位置的符号
$ | 匹配行尾 |
^ | 匹配行首 |
\< | 匹配单词词首 |
\> | 匹配单词词尾 |
3、正则表达式的实例
3.1 替换操作
- 在全局范围内把所有love或者Love都改成LOVE
:%s/[Ll]ove/LOVE/g
- 使用单个空格替换一个或者多个空格
:%s/ \+/ /g
3.2 删除操作
- 删除所有的空行(空行中只有一个回车符)
其中d是delete的意思
:g/^$/d
- 删除含有某些字符的行
:g/help/d
语法格式补充
:[range]global/[pattern]/[command]
global命令在[range]指定的文本范围内(若未指定range则为全局搜索)查找[pattern],然后对匹配到的行执行命令[command]。
如果对未匹配上的行执行命令,则使用global!或vglobal。
- 删除每行的所有前导空格
:%s/^ *//g
- 删除以数字开头的行
:%s/^\d.*$//g
- 删除以[a,b,c]开头的行,|是或运算符
:%s/^[a|b|c].*$//g
- 删除重复行
将两行重复行压缩成一行 :%s /^\(.*\)\n\1$ /\1 /g
将多行重复行压缩成一行 :%s /^\(.*\)\(\n\1\)\+$ /\1 /g
补充:正则表达式中第一个括号中的内容可以用 \1 表示,第二个括号中的内容可以用 \2 表示,以此类推。我下面针对压缩重复行做详细的解释。
3.3 插入操作
- 在文件中的每一行的开始插入>
:%s/^/>/g
- 在文件中的每一行的结尾插入。
:%s/$/。/g
3.4 其他应用实例
- 交换列表中所有连字符分隔的条目的顺序
:%s/\(.*\):\(.*\)/\2:\1/g
- 将func(a,b,c)的实例改为func(b,a,c)
:%s/func(\([^,]*\),\([^,]*\),\([^,]*\))/func(\2,\1,\3)/g
- 将行首的id替换为行号
:%s/\<id\>/\=line( "." )
标签:字符,匹配,删除,正则表达式,GVIM,等同于,IC,任意
From: https://blog.csdn.net/lbyNO_1/article/details/140626397