您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Vim 中使用正则表达式

相信大家对于正则表达式的概念应该不会陌生,正则表达式以一种能够匹配文本的方式,同样的作为时下最流行的编辑器,Vim 中也使用正则表达式,这个小节就让我们一起来看下如何在 Vim 中使用正则表达式。

1. 正则表达式概念

正则表达式(英文:regular expression),是一种文本模式。它赋予了 Vim 描述和分析文本的能力。可以根据需要,高效地增删改查各种类型得文本和数据。

实际工作中,无论是开发还是运维、测试等从事IT的人来说。正则表达式都是工作中必不可少的。它可以满足高效简洁地查找某些复杂规则的字符语句的需要。比如说以下几个场景:

对身份证号码 / IP 等匹配检查

网页对登陆名为手机号码匹配

特定规律字符串的处理

某些开头规律行

可以结合其他额外工具(grep、sed 等)高效处理文本

2. 正则表达式规则

Tips: 正则表达式= 特殊字符(元字符) + 文本(普通字符)

上面的公式其实就是完整的正则表达式,你可以简单的将正则表达式理解为是一种语言,元字符就是它的语法,普通字符就是单词。

我们来看简单的正则表达式的例子:

下面是化配置 的 。我们会用正则表达式 grep -E ‘(image_id|key name)’ 来同时匹配这两个字段。

对于不太了解正则表达式的人来说这段简单的公式是有点云里雾里的。下面我们来具体看下正则表达式具体语法规则有哪些,然后再回过头来看就一目了然了。

正则表达式按照字节或者字符作为匹配单位的。而不是单词或者句子。比如上述表达式我们简化下grep -E ‘bat’。 本质上不是匹配的 bat 这个单词,而是匹配 b,a,t 作为连续字符。

字符组:[0-9]:中括号作为正则表达式结构体,可以允许匹配结构体内任意匹配字符。比如这里的 [0-9] 匹配 0-9 之间任意数字。

Tips: 只有字符组内连字符 - 才是元字符。

多选结构:这就是我们刚才演示的例子。(a|b)——小括号中|作为元字符意思是或意思可以同时匹配 a、b.

下面我们来看下常用的具体表达式。

根据这些表达式+上述的正则表达式思想可以大部分正则表达式应用。本篇主要针对 Vim 正则表达式讲解所以更加复杂的正则表达式就不再赘述。根据上面的铺垫,下面会结合 Vim 场景应用讲解正则表达式。

3. Vim 正则表达式引擎

Vim 的正则表达式引擎和 Perl 相比不太一样。语法更接近于 POSIX。对于我们一般使用关了 Perl 正则表达式开发人员来说,使用方式的冲突会很不友好。但是通过 magic 开关设置可以满足不同的使用场景。

根据之前对正则表达式的讲解,我们知道正则表达式中有大量的有特殊含义的元字符。但是在使用 Vim 过程中会对普通带来不友好的使用体验。比如要 bat,这里是元字符所以不转义无法到。所以为了满足不同使用习惯和使用人群。Vim 加入了四种不同 magic 模式。

这里我们可以看到如果针对使用习惯一般正则表达式人来说,可以设置为very magic。我们可以针对上面的小例子展示下。
我们会通过\V 和 \v 不同模式下通过正则表达式查找以 resource 开头的行。

可以看到不同模式结果是不一样的。其他两种模式也是类似。大家可以手动自己操作下。

4. 小结

Vim 中正则表达式为了满足不同需求引入了 magic 开关。都有着各自使用场景:

very magic: 适用于偏好使用大量正则表达式的开发人员

very nomagic: 使用于普通,可以不必在意正则表达式元字符转义问题。

magic: 这个是开启了正则表达式的简单版,认可以使用这个模式,兼顾效率和使用场景。

nomagic: 这个只用于匹配特定行尾。


联系我
置顶