`
haierboos
  • 浏览: 443353 次
文章分类
社区版块
存档分类
最新评论

vim的正则表达式(一)

 
阅读更多




本文出自 http://blog.csdn.net/shuangde800

------------------------------------------------------------------------------------------------


本文是在学习《使用vi编辑器, Lamb & Robbins编著》时在所记的笔记。

本文内容:
模式匹配规则(正则表达式)
元字符
模式匹配举例


本文约定:
$+命令表示在普通的bash的命令行下
:+命令表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入

------------------------------------------------------------------------------------------------



搜索模式的元字符


进行全局替换时,不仅可以使用固定的字符串,还允许是搜索由正则表达式指代的可变的单词模式。

当你指定一个字面的字符串时,搜索可能会找到不想匹配的其他实例。
例如,在文件搜索单词时,单词可以有不同的使用方式。正则表达式有助于在上下文中搜索单词。要注意正则表达式可以与vi的搜索命令/?以及ex中的:g:s命令一起使用。

正则表达式由普通字符和许多称为元字符的专用字符结合在一起组成,元字符及其使用方法如下所示。



元字符 用法
.(点)
匹配除换行符之外的任何一个单个字符。空格也将作为字符。
例如p.p可以匹配pep,pip和pcp.
*(星号)
星号前面的一个字符可以出现0次或多次。
例如,bugs*将匹配bugs,bugss或bug。
*可以跟任何元字符。例如,由于.(点)代表任何字符,因此.*表示“匹配任意数量的任何字符”。
:s/End.*/End/会删除End后面的所有字符
^
当处在正则表达式的第一位时,它要求后面的正则表达式要出现在一行的开始。
例如,^Part可以匹配Parter,Partxx,但是不能匹配HeParter; ^...匹配一行的前三个字符。当^不在正则表达式的开始时,^只代表本身。
$
当处于正则表达式的最后一位时,它要求前面的正则表达式要出现在一行的结尾。
例如,here$可以匹配where, 但是不能匹配whoherehe。当不在结尾时,$就代表它本身。
\ 这是转义字符,可以把后面的元字符看成普通字符。例如\.表示一个普通的字符点,\*表示普通字符星号,\\可以获得真正的反斜杆(\)。
[ ]
匹配方括号中字符的任意一个。
例如[AB]将匹配A或B,p[aeiou]t,匹配pat,pet,pit,pot或put。可以通过使用连字符(-)来指定范围。例如,[A-Z]匹配字母A到Z之间的任意一个大写字母。[0-9]将匹配数字0到9之间的任意一个数字。

可以在方括号内包括多个范围,也可以把范围和单独的字符混合在一起。例如[:;A-Za-z()]将匹配四种不同的标点符号和所有的字母。

大部分元字符都将在方括号内失去它们的特殊含义,因此如果想把它们作为普通字符使用,就不需要对它们进行转义。在方括号内仍需要转义的三个元字符是\-。连字符(-)的含义是范围说明符,如果要使用真正的连字符,也可以将其放在放括号内的第一个字符位置。

插入符号(^)只有它在方括号内为第一个字符时才有特殊含义,但是这种情况下其含义与通常^元字符的含义不同。作为方括号的第一个字符,^使它们的含义反过来:将匹配不在方括号里的任何一个字符。例如,[^a-z]将匹配任何不是小写字母的字符。


\(和 \)
把\(和\)之间的模式保存到专门的存储空间(存储缓冲区)中,单一行最多可以保存9个模式。例如,要把this or That改为That or this
:%s/\(this\) or \(That\)/\2 or \1/ \2和\1是对缓冲区的引用
\<和\> 在单词的开始(\<)或结尾(\>)匹配字符。单词的开始或结束由标点符号或空格决定。
例如: \<ac将只匹配ac开头的单词, ac\>将匹配以ac结尾的单词
~
匹配上一次搜索中使用的任何正则表达式。
如果搜索过The,那么可以使用/~n来搜索Then。可以把~等价与上次的The,再加上n组合成Then

上面只是一些很基本的正则表达式,除此之外还有很多拓展的正则表达式语法。



元字符在替换串中的使用


当在进行全局替换时,上面的正则表达式之有在命令搜索的部分有特殊含义,在替换串中是按照字符原来的意思来的。
例如,
:%s /hello/$.^/ 会把hello替换成$.^,$.^在这里没有特殊含义,不需要用转义(用了也可以)







替换串中的元字符


元字符 用法
\ 转义
&
用在替换串,它代表与搜索模式想匹配的整个文本,即“重现”搜索串。这在试图避免重复输入文本时很有用。例如,
:%s/hello/&, world/ 将会把hello替换成hello, wolrd
:%s/.*/(&)/ 将会把所有行用()包含起来

用在替换串中,重复上次的替换串。例如,
上次使用$s/his/their/ 把his改为their
这次使用$ s/her/~/ 会把her改为their
\u或\l
把替换串中的下一个字符分别变成大写或者小写。例如,
:s/yes, sir/\uyes, \usir/g 把yes, sir变成Yes, Sir
\U 或 \L

将跟在后面的匹配串全部变成大写或小写。例如,
:s/world/\U&/ 把world变成WORLD

以上是基本的正则表达式,还有很多拓展的正则表达式。



更多的替换技巧


  • :s:s//~/相同,都是重复上次替换
  • 可以把&看作是“同一事情”的意思(与匹配的文本)。
  • &键也可以作为vi命令来执行:&命令(按shift + &),即重复上次替换。
  • :~:&(或shift+&)类似,~是重复上次任何命令中所使用的正则表达式,而不仅仅是替换命令。
  • 除了/字符外,还可以使用除反斜杆,双引号和竖直线(\、"和|) 之外的任何非字母表、非空白字符作为分隔符,在对路径名进行修改时,这点尤其便利::%s ; /user1/tim;/home/time;g 把/user1/tim改为/home/time



模式匹配举例


1. 加入要把一个文件内的所有child替换为children,如果直接用
:%s/child/children/g
可能会有问题,因为把children和Faichild这样的单词中的"child"部分替换为了children,可以用\<和\>来表示“只有该模式是个完整的单词”,
:%s/\<child\>/children/g



搜索单词的常规类


假设你的子函数名以前缀mgi、mgr和mga开头,例如:
mgibox routine,
mgrbox routine,
mgabox routine,
既想保留前缀,又想把box改为square,那么下面两个替换命令都可以完成:
1):g/mg\([ira]\)box/s//mg\1square/g
2):g/mg[ira]box/s/box/square/g



分享到:
评论

相关推荐

    vim正则表达式的使用

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

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

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

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

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

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

    首先要记住的是: 正则表达式...正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大。

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

    正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于...

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

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

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

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

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

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

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

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

    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; -...

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

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

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

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

    Vim的使用

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

    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; 地位测试版,欢迎反馈改编自 大多数...

    学习vi和vim编辑器_第7版_中文+英文_PDF

    ·使用Vim的扩展文本对象以及威力强大的正则表达式 ·执行多窗口编辑,并设计Vim脚本 ·充分利用图形化用户界面版的Vim,gvim ·使用Vim的强化功能,例如语法高亮显示及扩展标签 ·Vim与其他三种vi同类品的比较...

    simple_vim_guide:简单的vim指南

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

    incsearch.vim:改进了Vim的增量搜索

    增量正则表达式编辑在增量搜索中,您可以一次看到给定正则表达式匹配的所有模式。用法安装Neobundle / Vundle / vim插件NeoBundle ' haya14busa/incsearch.vim 'Plugin ' haya14busa/incsearch.vim 'Plug ' haya14...

Global site tag (gtag.js) - Google Analytics