本文出自 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
|
以上是基本的正则表达式,还有很多拓展的正则表达式。
更多的替换技巧
- 可以把&看作是“同一事情”的意思(与匹配的文本)。
- &键也可以作为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正则表达式的特性 在探讨具体的查找替换示例之前,我们先来了解一下VIM中正则表达式的几个重要特性,这对于理解和应用正则表达式至关重要。 1. **特殊符号的转义**: - 在VIM中,某些符号需要通过`\`...
9. **实例应用**:正则表达式广泛应用于文本编辑器(如vim、emacs)、编程语言(如JavaScript、Python、Java)和搜索引擎(如grep、findstr)。例如,用于验证邮箱格式、手机号码、提取URL等。 通过《精通正则...
4. **vi/vim**:vi编辑器中的替换命令`:%s/pattern/replacement/g`允许用户使用正则表达式进行全局替换。 5. **Editplus**:在文本编辑器Editplus中,正则表达式可以用于查找和替换功能,提高文本处理效率。 三、...
- **文本编辑器**(如 Vim):提供了基础的正则表达式支持,可用于查找和替换文本。 - **grep**:一个强大的命令行工具,用于搜索文件中的模式。 - **sed**:一个流编辑器,常用于文本文件的自动化处理。 - **awk**...
PCRE(Perl Compatible Regular Expressions)是一个著名的开源库,主要用于处理正则表达式。这个库由Philip Hazel开发,它的设计目标是尽可能地兼容Perl语言中的正则表达式语法和行为。由于其强大的功能、出色的...
首先,Vim是一款非常著名的文本编辑器,它也提供了强大的正则表达式支持。在Vim中,你可以使用正则表达式进行查找、替换和编辑操作。例如,`/pattern` 用于向前查找匹配`pattern`的文本,`\=`前缀可以用于执行一个...
- 文本编辑器:如Vim、Emacs等,提供了强大的正则表达式搜索和替换功能。 - 命令行工具:如Unix/Linux的grep、sed、awk等,利用正则表达式处理文本文件。 四、正则表达式实例 1. 验证邮箱格式:`/^[a-zA-Z0-9._%+-...
- 在文本编辑器(如vim、emacs)中,正则表达式常用于查找、替换和多行操作。 - 在Web开发中,正则表达式用于表单验证,确保用户输入的数据格式正确。 9. **效率优化** - 理解并避免回溯,合理使用贪婪与非贪婪...
11. **实际应用**:书中可能涵盖如何在各种编程语言(如Python、Java、JavaScript)中使用正则表达式,以及在文本编辑器(如vim、emacs)或命令行工具(如grep、sed)中的应用。 12. **调试与测试**:介绍如何使用...
- 在文本编辑器或命令行工具(如 Vim 或 grep)中,使用正则表达式进行查找和替换。 - 在表单验证中,可以使用正则表达式检查用户输入的有效性。 10. **学习与进阶** - 学习正则表达式需要掌握基础规则,然后...
正则表达式是一种文本模式,包括普通字符(例如,字母和数字)和特殊字符(称为“元字符”)。它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Shell脚本中,正则表达式可以与grep、sed、awk等工具...
正则表达式广泛应用于各种编程语言和工具中,如grep、sed、awk、Perl以及现代的IDE和文本编辑器(如vim、emacs)。 正则表达式的语法是其核心所在。以下是一些基本的元字符及其含义: 1. `^`:锚点,表示匹配字符...
- **vim** 和 **emacs**:屏幕编辑器,支持正则表达式进行文本查找和替换。 - **扩展的正则表达式 (ERE)**:提供更高级的匹配功能。 - **egrep**:使用扩展的正则表达式进行文本匹配。 - **awk**:用于执行更...
9. **在不同环境中的应用**:讲解如何在各种编程语言(如Python、JavaScript、Java等)或工具(如grep、sed、vim等)中使用正则表达式。 10. **高级主题**:可能包括正则表达式的回溯机制、后向引用、条件匹配、非...
- **文本编辑器**:如Vim、Sublime Text等,使用正则表达式进行查找和替换。 - **编程语言**:Python、Java、JavaScript等都内置了正则表达式支持。 - **Web开发**:HTML表单验证、URL路由、服务器端脚本处理等。...
Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作。下面这篇文章主要给大家介绍了关于Vim中查找替换及正则表达式使用的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来...