`

Vim 正则表达式 and some tips

阅读更多
搜索vim正则表达式, 发现了下面这篇文章。
进而链接到了下面这个网站:Vim中文维基
?
感觉还不错,vim其实有自己的tips wiki,可惜在公司上不了。
?
另外在网上搜索vim tips会发现这个文章:vim best tips,上次搜索过一次,感觉很不错,这几记录下来。
?
呵呵,忙里偷闲看了一眼这些文章,感觉世界美好了许多~:)?
分享到:
评论
2 楼 wjason 2008-12-24  
    *  使用正则表达式的命令
    * 元字符
          o 表示数量的元字符
          o 表示位置的符号
    * 替换变量
    * 函数式
    * 与Perl正则表达式的区别

Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作。

如果你比较熟悉Perl的正规表达式,可以直接参照与Perl正则表达式的区别一节。
使用正则表达式的命令 †

使用正则表达式的命令最常见的就是 / (搜索)命令。其格式如下:

/正则表达式

另一个很有用的命令就是 :s(替换)命令,将第一个//之间的正则表达式替换成第二个//之间的字符串。

:s/正则表达式/替换字符串/选项

在学习正则表达式时可以利用 / 命令来练习。

元字符 †

元字符是具有特殊意义的字符。使用元字符可以表达任意字符、行首、行尾、某几个字符等意义。

元字符一览
元字符 说明
. 匹配任意一个字符
[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围,
如[a-z0-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_]。
\t 匹配<TAB>字符。
\s 匹配空白字符,等同于[ \t]。
\S 匹配非空白字符,等同于[^ \t]。

另外,如果要查找字符 *、.、/等,则需要在前面用 \ 符号,表示这不是元字符,而只是普通字符而已。
元字符 说明
\* 匹配 * 字符。
\. 匹配 . 字符。
\/ 匹配 / 字符。
\\ 匹配 \ 字符。
\[ 匹配 [ 字符。

表示数量的元字符 †
元字符 说明
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个

表示位置的符号 †
元字符 说明
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾

使用例

/char\s\+[A-Za-z_]\w*;                 " 查找所有以char开头,之后是一个以上的空白,
                                             " 最后是一个标识符和分号
/\d\d:\d\d:\d\d                        " 查找如 17:37:01 格式的时间字符串
:g/^\s*$/d                             " 删除只有空白的行
:s/\<four\>/4/g                        " 将所有的four替换成4,但是fourteen中的four不替换


替换变量 †

在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。

使用例

/\(a\+\)[^a]\+\1                                          " 查找开头和结尾处a的个数相同的字符串,
                                                                  " 如 aabbbaa,aaacccaaa,但是不匹配 abbbaa
:s/\(http:\/\/[-a-z\._~\+%\/]\+\)/<a href="\1">\1<\/a>/   " 将URL替换为<a href="http://url">http://url</a>的格式
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1                            " 将 data1 data2 修改为 data2 data1


函数式 †

在替换命令 s/// 中可以使用函数表达式来书写替换内容,格式为

:s/替换字符串/\=函数式

在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。

使用例

:%s/\<id\>/\=line(".")                              " 将各行的 id 字符串替换为行号
:%s/^\<\w\+\>/\=(line(".")-10) .".". submatch(1)    " 将每行开头的单词替换为 (行号-10).单词 的格式,
                                                           " 如第11行的 word 替换成 1. word


与Perl正则表达式的区别 †

元字符的区别

Vim语法    Perl语法        含义(vim中的正则表达式部分元字符需要\转义。
\+           +            1-任意个
\?           ?            0-1个
\{n,m}       {n,m}        n-m个
\(和\)       (和)          分组
\|           |            或操作
1 楼 wjason 2008-10-13  
替换变量

在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。

相关推荐

    vim正则表达式的使用

    vim正则表达式的使用,轻松处理文本文件

    VIM正则表达式查找替换[PDF电子教程]

    VIM,很好很强大;正则表达式亦是如此。将两者有机结合起来,使工作效率更高。本教程面向正则表达式爱好者或有一定基础的VIM用户。非常之详细。

    Vim中查找替换及正则表达式的使用详解

    Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作。下面这篇文章主要给大家介绍了关于Vim中查找替换及正则表达式使用的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来...

    grep用法详解---grep与正则表达式

    首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法, ...vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大。

    grep用法详解 grep与正则表达式

    vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享...

    regex-cheatsheet:不同正则表达式语法的备忘单

    正则表达式语法备忘单 许多程序使用正则表达式来查找和替换文本。 然而,它们往往带有自己不同的风味。 您可能会期望大多数现代软件和编程语言都使用 Perl 风格的一些变体,“PCRE”; 然而,命令行工具(grep、...

    linux下关于正则表达式grep的一点总结

    正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。类似于生活中常见的寻人启示,通过描述一个人的特征来...

    vim-HideShow:基于正则表达式的交互式折叠

    隐藏显示.vim HideShow 可以轻松地将基于正则表达式的折叠应用于您的 vim 缓冲区。 例如,Java 源文件的简单折叠可能是: :Show \v (public|private|protected) :Show 和 :Hide 调用是累积的,因此以下三个 :Show ...

    vim-fnr:没有正则表达式的 Find-N-Replace 助手

    vim-fnr 在 Vim 中使用实时预览进行 Find-N-Replace(实验性)安装使用您最喜欢的插件管理器。 VIM-FNR需要 。 使用 : Plug ' junegunn/vim-pseudocl 'Plug ' junegunn/vim-fnr '用法正常模式&lt;Leader&gt;r&lt;Movement&gt; -...

    shell脚本之正则表达式、grep、sed、awk

    –正则– 基础正则 ^word ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$ ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$ ##表示空行 . ##代表且只能代表任意一个字符 \ ##例:\. 只代表点本身,转义符号,让...

    vim编辑器中熟练掌握正则表示法

    熟练掌握正则表示法 简单地说,正则表示法就是处理字符串的方法,它以“行”为单位来进行字符串的处理。正则表示法透过一些特殊符号的辅助,可以让使用者轻易完成查找/删除/替换某些特定字符串...3.基础正则表达式的特

    txt2regex:终端的Regex向导,用Bash编写

    Txt2regex知道许多不同的正则表达式风格的特殊符号和注意事项,可以为20多个目标生成有效的正则表达式,包括grep,sed,Vim,Emacs,JavaScript,Python,PHP,PostgreSQL。 Txt2regex是一个单文件shell脚本,使用...

    errorformat:Go中Vim的quickfix errorformat实现

    请注意,它与Vim实现高度兼容,但不支持Vim正则表达式。 :play_button_selector: 操场 :play_button_selector: 上尝试errorformat! 游乐场使用尝试在Go with JavaScript中实现 :sparkles: 用法 import "github....

    Yankitute:正则表达式驱动的Yank +替代品

    Yankitute将yank和substitute Vim命令合并为一个。 像替换一样,它在缓冲区中搜索模式,并使用用户提供的格式字符串转换所有匹配项。 但是,它没有像转换后的匹配项那样替换缓冲区中的文本,而是像yank一样将转换后...

    VimRegexTutor:用于学习Vim中正则表达式的vimtutor克隆

    VimRegexTutor Vim编辑器用户的“动手”正则表达式教程。 小费如果您喜欢VimRegexTutor并想分享W00t !,我将感谢您提供的或。 项目页面 维护者巴里·亚瑟(Barry Arthur)&lt; &gt; 地位测试版,欢迎反馈改编自 大多数...

    Mastering Vim Build a software development environment with Vim and Neovim

    Mastering Vim: Build a software development environment with Vim and Neovim By 作者: Ruslan Osipov ISBN-10 书号: 1789341094 ISBN-13 书号: 9781789341096 出版日期: 2018-11-30 pages 页数: (330) Vim is ...

    Vim的使用

    取代s1.4 Vim正则表达式 [^3]文本元字符数量元字符[^4]位置元字符转义特殊字符子表达式回溯引用前后查找2、Vim编辑模式3、指令列模式4、三种模式相互关系的简略图 1、Vim一般模式 以 vim 打开一个档案就直接进入一般...

    simple_vim_guide:简单的vim指南

    simple_vim_guide 插件介绍 如何编写插件 像IDE一样使用 命令用法 使用内置功能 VIM正则表达式和搜索/替换

    Linux常用命令及操作技巧汇总

    同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。2)文本与文件查找:grep和find命令将会很便利。3)系统管理篇:服务状态的查询命令,服务配置文件的缩写,访问控制方式分类以及源代码编译安装等。4)硬盘...

Global site tag (gtag.js) - Google Analytics