GVIM正则表达式介绍和使用示例

电子说

1.3w人已加入

描述

作者|清洬

编辑|清洬

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

交换列表中所有以:分割的字符的顺序,如下图

正则表达式

以上就是正则表达式使用的一些例子。可以尝试其他功能的正则表达式,比如大小写替换,查找特定形式的字符等等。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分