0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_SMr56CbK 来源:集成电路设计 2023-12-18 15:09 次阅读

作者|清洬

编辑|清洬

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。如图

5db53894-9d74-11ee-8b88-92fbcf53809c.png

注意使用该命令后,只有第一行发生了变化。因为只有第一行符合匹配条件[Aa]sic。所以只有第一行被替换成了ASIC。

命令解读:%s(substitute)为全局替换;[Aa]sic为匹配的内容;ASIC为替换的内容;g为global。

:%s/ +/ /g

使用单个空格替换一个或多个空格。如下图

5dd15f74-9d74-11ee-8b88-92fbcf53809c.png

使用命令后第一行的3个空格和第二行的2个空格均被1个空格所取代。

命令解读:%s为全局替换;“+"为匹配1个或多个空格;‘’为替换的内容。g为global。代表空格。

:[range]global/{pattern}/{command}

global命令在[range]指定的文本范围内(缺省时为整个文件)查找{pattern},然后匹配到的行执行命令{command},如果希望对没匹配上的执行命令,则使用global!vglobal命令。

:g/^[ ]*$/d

删除所有的空行(没有任何字符,除了一个回车符),如图所示。

5de2e406-9d74-11ee-8b88-92fbcf53809c.png

命令使用后,所有只有一个换行符的行都被删掉。注意如果使用:g/^[ ]$/d则达不到效果。

:g/asic/d

删除含有asic字符的行,如下图

5decf19e-9d74-11ee-8b88-92fbcf53809c.png

因为只有第一行有asic,所以第一行被删掉了。

:%s/^ *//g

删除每行的所有的前导空格,如下图

5dff7ac6-9d74-11ee-8b88-92fbcf53809c.png

每一行开头的所有空格都会被删掉。*表示匹配0-任意个数量。//表示不用内容代替,即删除的意思

:%s/^/*/g

在文件中的每一行的开始插入*字符,如下图

5e070598-9d74-11ee-8b88-92fbcf53809c.png

如果想在特定行插入的话,可以改成下面形式

:18,20s/^/*/g 即在18-20行的开头插入*字符。

:%s/^d.*$//g

删除以数字开头的行,如下图

5e0dc6c6-9d74-11ee-8b88-92fbcf53809c.png

删除效果,只保留了没有数字开头的后两行。.*组合表示匹配任意多个任意字符。比较常用!

:%s/^[a|b|c].*$//g

删除以a或者b或者c开头的行,如下图

5e1c0eac-9d74-11ee-8b88-92fbcf53809c.png

以a,b,c开头的行被删除掉。在区分大小写的情况下。(set noic设置区分大小写)

:%s/^abc.*$//g

删除以abc开头的行,如下图

5e2b80ee-9d74-11ee-8b88-92fbcf53809c.png

这个命令只删除了以abc开头的行,区别于第9条命令。

:%s/^(.*) 1$/1/g

将两行重复行压缩成一行,如下图

5e3d4216-9d74-11ee-8b88-92fbcf53809c.png

命令解读:从行首(^)开始,匹配任意字符(.*),然后匹配换行符( ),第二行匹配与括号内内容相同(1),到行尾($)。替换的内容为括号((.*))内的内容。

12 :%s/^(.*)(n1)+$/1/g

将多行重复行压缩成一行,如下图

5e47da14-9d74-11ee-8b88-92fbcf53809c.png

1代表红色括号的内容;如果有2则代表绿色括号中的内容。

13.:%s/(.*):(.*)/2:1/g

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

5e4ef29a-9d74-11ee-8b88-92fbcf53809c.png

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

审核编辑:汤梓红

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

    关注

    0

    文章

    229

    浏览量

    24888
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • Gvim
    +关注

    关注

    0

    文章

    8

    浏览量

    2897
  • 正则表达式
    +关注

    关注

    0

    文章

    25

    浏览量

    3433

原文标题:GVIM正则表达式

文章出处:【微信号:集成电路设计,微信公众号:集成电路设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是正则表达式正则表达式如何工作?哪些语法规则适用正则表达式

    正则表达式又称规则表达式(Regular Expression,在代码中常简写为 regex、regexp 或 RE),是一种用于匹配、查找、替换文本的强大工具。它能够以特定的模式匹配字符串,从而
    的头像 发表于 11-03 14:41 568次阅读
    什么是<b class='flag-5'>正则表达式</b>?<b class='flag-5'>正则表达式</b>如何工作?哪些语法规则适用<b class='flag-5'>正则表达式</b>?

    shell正则表达式学习

    正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多
    发表于 07-25 17:18

    正则表达式在Vivado约束文件中的应用

    文件中匹配目标的时候,在可行的情况下更倾向于使用正则表达式。本文就介绍一下我常使用的正则表达式和一些在Vivado中应用的特殊之处,同时也有个别自己尚未解决的问题。
    发表于 01-26 07:03

    初识 Python 正则表达式

    正则表达式是一个特殊的字符序列,用于判断一个字符串是否与我们所设定的字符序列是否匹配,也就是说检查一个字符串是否与某种模式匹配。Python 自 1.5 版本起增加了re 模块,它提供 Perl
    发表于 03-17 16:44

    深入浅出boost正则表达式

    什么是正则表达式正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express. 如果您不知道什么是正则表达式,请看这篇文章:深入浅出之正则表达式
    发表于 09-08 18:09 9次下载

    关于java正则表达式的用法详解

    正则表达式 一个正则表达式是一个用于文本搜索的文本模式。换句话说,在文本中搜索出现的模式。例如,你可以用正则表达式搜索网页中的邮箱地址或超链接。 正则表达式
    发表于 09-27 14:24 0次下载

    Python正则表达式教程之标准库的完整介绍及使用示例说明

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用
    发表于 01-23 16:00 3次下载
    Python<b class='flag-5'>正则表达式</b>教程之标准库的完整<b class='flag-5'>介绍</b>及使用<b class='flag-5'>示例</b>说明

    Python正则表达式的学习指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用
    发表于 09-15 08:00 0次下载
    Python<b class='flag-5'>正则表达式</b>的学习指南

    Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用
    发表于 03-26 09:13 10次下载
    Python<b class='flag-5'>正则表达式</b>指南

    C语言如何使用正则表达式

    C语言的正则表达式规则,特此跟大家分享。
    的头像 发表于 03-16 08:41 4290次阅读

    python正则表达式中的常用函数

    编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
    的头像 发表于 03-18 16:12 1558次阅读

    Linux入门之正则表达式

    一些约定好的匹配规则,但由于规则较多,可能比较容易忘记。 本文会先整理出所有的正则表达式以及其含义,接下来会利用grep命令,详细介绍每种正则表达式的使用方式,并给出案例。
    的头像 发表于 05-12 15:31 567次阅读
    Linux入门之<b class='flag-5'>正则表达式</b>

    Python中的正则表达式

    哈喽大家好,我是了不起,今天给大家讲Python中的正则表达式 在Python中,正则表达式是一种强大的文本处理工具,它可以用来匹配、搜索、替换文本。正则表达式是一个特殊的字符序列,它可以描述一类
    的头像 发表于 06-21 16:52 713次阅读

    linux正则表达式匹配字符串

    是非常重要的。本文将详细介绍Linux正则表达式的基本语法和常见用法,帮助读者深入了解并灵活运用正则表达式。 第一部分:正则表达式的基本语法 元字符的使用 在
    的头像 发表于 11-23 10:26 335次阅读

    你还不会gvim正则表达式?一文搞懂!

    gvim正则表达式常在命令行模式下使用,一般用于文本文件字符串的替换、删除等操作。
    的头像 发表于 01-19 16:47 317次阅读