电子说
作者|清洬
编辑|清洬
GVIM正则表达式
行文目录
1 | 正则表达式介绍 |
2 | 基本命令 |
3 | 元字符 |
4 | 特殊字符 |
5 | 表示数量的元字符 |
6 | 表示位置的元字符 |
7 | 示例 |
01:正则表达式介绍
20世纪50年代,一位名叫Stephen Cole Kleene的美国数学家发表了规则的语言(regular language)的定义。规则的表达式就是用来描述规则的语言的表达式。后来发明UNIX的Ken Thompson借用这个概念并将它应用到了文本编辑器中。后面正则表达式的说法进入到了大家常用的vi、vim、gvim当中。
正则表达式在gvim、perl以及sed等情况中都可以使用。它可以帮助我们完成以下几类工作:
①确认字符串是否匹配了某种模式
②把字符串中匹配了某种模式的内容捕获出来
③把字符串中匹配的内容替换成指定的内容
下面进入正则表达式的世界中吧!掌握了它并能熟练运用的话,能完成很多难以想象的工作的哦!
02:基本命令
/ 搜索命令(例如 /正则表达式)
/ab 即为搜索字母组合ab
:s 替换命令
:s/正则表达式/替换字符串/选项
03:元字符
. | 匹配任意一个字符 |
[abc] | 匹配方括号中的任意一个字符,可以使用-表示字符范围。如[a-z0-9]匹配小写字母和0-9数字 |
[^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_] |
匹配 |
|
s | 匹配空白字符,等同于[ ] |
S | 匹配非空白字符,等同于[^ ] |
匹配回车符 |
04:特殊字符
* | 匹配 * 字符 |
. | 匹配 . 字符(注意与.的区别) |
/ | 匹配 / 字符 |
\ | 匹配 字符 |
[ | 匹配 [ 字符 |
05:表示数量的元字符
* | 匹配 0-任意个 |
+ | 匹配 1-任意个 |
? | 匹配 0-1个 |
{n,m} | 匹配n-m个 |
{n} | 匹配 n个 |
{n,} | 匹配 n-任意个 |
{,m} | 匹配 0-m个 |
06:表示位置的元字符
$ | 匹配 行尾 |
^ | 匹配 行首(区分[^abc],这个hat符号是在方括号里面) |
< | 匹配 单词词首 |
> | 匹配 单词词尾 |
07:示例
①:%s/[Aa]sic/ASIC/g
把所有单词asic或者Asic都替换为ASIC。如图
注意使用该命令后,只有第一行发生了变化。因为只有第一行符合匹配条件[Aa]sic。所以只有第一行被替换成了ASIC。
命令解读:%s(substitute)为全局替换;[Aa]sic为匹配的内容;ASIC为替换的内容;g为global。
②:%s/ +/ /g
使用单个空格替换一个或多个空格。如下图
使用命令后第一行的3个空格和第二行的2个空格均被1个空格所取代。
命令解读:%s为全局替换;“︺+"为匹配1个或多个空格;‘︺’为替换的内容。g为global。︺代表空格。
③:[range]global/{pattern}/{command}
global命令在[range]指定的文本范围内(缺省时为整个文件)查找{pattern},然后匹配到的行执行命令{command},如果希望对没匹配上的执行命令,则使用global!或vglobal命令。
④:g/^[ ]*$/d
删除所有的空行(没有任何字符,除了一个回车符),如图所示。
命令使用后,所有只有一个换行符的行都被删掉。注意如果使用:g/^[ ]$/d则达不到效果。
⑤:g/asic/d
删除含有asic字符的行,如下图
因为只有第一行有asic,所以第一行被删掉了。
⑥:%s/^ *//g
删除每行的所有的前导空格,如下图
每一行开头的所有空格都会被删掉。*表示匹配0-任意个数量。//表示不用内容代替,即删除的意思
⑦:%s/^/*/g
在文件中的每一行的开始插入*字符,如下图
如果想在特定行插入的话,可以改成下面形式
:18,20s/^/*/g 即在18-20行的开头插入*字符。
⑧:%s/^d.*$//g
删除以数字开头的行,如下图
删除效果,只保留了没有数字开头的后两行。.*组合表示匹配任意多个任意字符。比较常用!
⑨:%s/^[a|b|c].*$//g
删除以a或者b或者c开头的行,如下图
以a,b,c开头的行被删除掉。在区分大小写的情况下。(set noic设置区分大小写)
⒑:%s/^abc.*$//g
删除以abc开头的行,如下图
这个命令只删除了以abc开头的行,区别于第9条命令。
⒒:%s/^(.*) 1$/1/g
将两行重复行压缩成一行,如下图
命令解读:从行首(^)开始,匹配任意字符(.*),然后匹配换行符( ),第二行匹配与括号内内容相同(1),到行尾($)。替换的内容为括号((.*))内的内容。
12 :%s/^(.*)(n1)+$/1/g
将多行重复行压缩成一行,如下图
1代表红色括号的内容;如果有2则代表绿色括号中的内容。
13.:%s/(.*):(.*)/2:1/g
交换列表中所有以:分割的字符的顺序,如下图
以上就是正则表达式使用的一些例子。可以尝试其他功能的正则表达式,比如大小写替换,查找特定形式的字符等等。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !