linuxvi匹配括号,[zz]vi的匹配符特殊字符. 匹配任意⼀个字符
[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 匹配字符。
\s 匹配空⽩字符,等同于[ \t]。
\S 匹配⾮空⽩字符,等同于[^ \t]。
\a 所有的字母字符. 等同于[a-zA-Z]
\l ⼩写字母 [a-z]
\L ⾮⼩写字母 [^a-z]
\u ⼤写字母 [A-Z]
\U ⾮⼤写字母 [^A-Z]
表⽰数量的元字符
元字符 说明
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个
\_. 匹配包含换⾏在内的所有字符
\{-} 表⽰前⼀个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好
\= 匹配⼀个可有可⽆的项
\_s 匹配空格或断⾏
\_[]
元字符 说明
\* 匹配 * 字符。
\. 匹配 . 字符。
\/ 匹配 / 字符。
\\ 匹配 \ 字符。
\[ 匹配 [ 字符。
表⽰位置的符号
元字符 说明
$ 匹配⾏尾
^ 匹配⾏⾸
\< 匹配单词词⾸
\> 匹配单词词尾
替换变量
在正规表达式中使⽤ \( 和 \) 符号括起正规表达式,即可在后⾯使⽤\1、\2等变量来访问 \( 和 \) 中的内容。
懒惰模式
\{-n,m} 与\{n,m}⼀样,尽可能少次数地重复
\{-} 匹配它前⾯的项⼀次或0次, 尽可能地少
\| "或"操作符
\& 并列
函数式
:s/替换字符串/\=函数式
在函数式中可以使⽤ submatch(1)、submatch(2) 等来引⽤ \1、\2
等的内容,⽽submatch(0)可以引⽤匹配的整个内容。
与Perl正则表达式的区别
元字符的区别
Vim语法 Perl语法 含义
\+ + 1-任意个
\? ? 0-1个
\{n,m} {n,m} n-m个
\(和\) (和) 分组
例如:
1,去掉所有的⾏尾空格:“:%s/\s\+$//”。“%”表⽰在整个⽂件范围内进⾏替换,“\s”表⽰空⽩字符(空格和制表符),“\+”对前⾯的字符匹配⼀次或多次(越多越好),“___FCKpd___0rdquo;匹配⾏尾(使⽤“\___FCKpd___0rdquo;表⽰单纯的“___FCKpd___0rdquo;字符);被替换的内容为空;由于⼀⾏最多只需替换⼀次,不需要特殊标志。这个还是⽐较简单的。(/)
2,去掉所有的空⽩⾏:“:%s/\(\s*\n\)\+/\r/”。这回多了“\(”、“\)”、“\n”、“\r”和
“*”。“*”代表对前⾯的字符(此处为“\s”)匹配零次或多次(越多越好;使⽤“\*”表⽰单纯的“*”字符),“\n”代表换⾏
符,“\r”代表回车符,“\(”和“\)”对表达式进⾏分组,使其被视作⼀个不可分割的整体。因此,这个表达式的完整意义是,把连续的换⾏符(包含换⾏符前⾯可能有的连续空⽩字符)替换成为⼀个单个的换⾏符。唯⼀很特殊的地⽅是,在模式中使⽤的是“\n”,⽽被替换的内容中却不能使⽤“\n”,⽽只能使⽤“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help
NL-used-for-Nul”。
3,去掉所有的“//”注释:“:%s!\
s*//.*!!”。⾸先可以注意到,这⼉分隔符改⽤了“!”,原因是在模式或字符串部分使⽤了“/”字符,不换⽤其他分隔符的话就得在每次使⽤“/”字符本⾝时写成“\/”,上⾯的命令得写成“:%s/\s*\/\/.*//”,可读性较低。命令本⾝倒是相当简单,⽤过正则表达式的⼈估计都知道“.”匹配表⽰除换⾏符之外的任何字符吧。
4,去掉所有的“”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。这个略有点复杂了,⽤到了⼏个不太常⽤的 Vim
正则表达式特性。“\_.”匹配包含换⾏在内的所有字符;“\{-}”表⽰前⼀个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表⽰⼀⾏⾥可以匹配和替换多次。替换的结果是个空格的⽬的是保证像“intmain()”这样的表达式在替换之后仍然是合法的。
:g/^\s*$/d 删除只有空⽩的⾏
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1 将 data1 data2 修改为 data2 data1
:%s/\(\w\+\), \(\w\+\)/\2
\1/ 将 Doe,正则表达式获取括号内容
John 修改为 John Doe
:%s/\/\=line(".") 将各⾏的 id
字符串替换为⾏号
:%s/\(^\\)/\=(line(".")-10) .".".
submatch(1)
将每⾏开头的单词替换为(⾏号-10).单词的格式,如第11⾏的word替换成1. word
排序 :/OB/+1,$!sort
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论