vim编辑器匹配字符串出现多少次

vim结合正则表达式可以实现复杂的功能,如
vim中常用的查找替换 %s/匹配字符串/替换字符串/g
若只想匹配字符串的次数:
%s/字符串/&/gn
n,代表只报告匹配的个数,而不进行实际的替换。
如果只想当前行内的出现该字符串次数呢?
:s/字符串/&/gn 
如果在m和n行之间查找 字符串 出现的次数
:m,ns/字符串/&/gn 

如果每行的bbb不超过2个,简单地可以这样:
:%s/(bbb.*)bbb/1/
这条命令比较好理解,在普通vi下应该也可以用。但由于*的贪婪性,当bbb超过2个时会删除最后一个bbb而不是第二个。为了避免这个问题,上面的命令可以改写成:
:%s/(bbb.{-})bbb/1/
(bbb.*)@<=是一个所谓0宽度的“断言”(说老实话, 我一直对正则里某些术语的翻译大倒胃口),通俗地说它匹配的不是字符串而是“位置”。什么样的位置呢?这里就是那些前面匹配bbb.*的位置,即前面出现过bbb的位置。注意这里用了“那些”,因为这样的位置有很多,在第一个bbb的后面的位置都符合条件。那么第二个bbb出现的位置也符合条件,自然第二个bbb就匹配了下面这个表达式:
(bbb.*)@<=bbb
当然第三个第四个(如果有的话)也匹配,但第一次匹配是第二个bbb。
看来在断言中出现的量词,讨论其贪婪性时要小心了。

VIM真是强大,对正则表达式的语法扩展也是于主流之外自成体系,难免给我们又增加了一些学习的成本

时间: 2024-09-23 10:28:55

vim编辑器匹配字符串出现多少次的相关文章

RHCE 学习笔记(4)- 重定向,管道和VIM编辑器

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1592526 这一节主要学习了重定向,管道和VIM编辑器 首先看看输出重定向 1 > 或者> 都表示将正确的信息覆盖输出重定向, 1>>或者>>表示追加的重定向 2 > 表示将错误的信息覆盖输出重定向, 2>>表示追加的错误信息重定向 &> 将所有的信息,正确

php中如何用preg_match_all匹配字符串

问题描述 php中如何用preg_match_all匹配字符串 <div class="Wrapper"> <div class="colImg"> <a href="http://store.shopping.yahoo.co.jp/matsunami/fcdm3.html"></a> </div> <div class="wrCol cf"> <

c-请问匹配字符串中重复字符串内容的正则表达式怎么写?

问题描述 请问匹配字符串中重复字符串内容的正则表达式怎么写? 匹配字符串中重复的字符串内容的正则表达式 或者匹配不重复的字符串内容? 解决方案 ASP 正则表达式匹配字符串提取正则表达式 字符串完全匹配获取正则表达式匹配的字符串 解决方案二: http://blog.csdn.net/zhulinu/article/details/17148511 解决方案三: 用"+"来表示重复一次或多次,建议看看正则表达式

正则表达式匹配字符串实现详解

使用正则表达式最常用的是考虑实现正则表达式匹配的判断,在实际工作中经常会遇到什么需要匹配的字符串操作呢?下面我们来看看实现正则表达式匹配字符串的操作实例. 正则表达式匹配字符串实例: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^\w+$ //匹配由数字.26个英文字母或者下划线组成

Linux系统Vim编辑器如何安装YouCompleteMe插件?

Linux系统Vim编辑器如何安装YouCompleteMe插件?  编译配置选项: /configure --with-features=huge --enable-pythoninterp --enable-python3interp --enable-luainterp --enable-multibyte --enable-sniff --enable-fontset 在我的机器上装有python2.7.5 和 python3.3, 但加了enable-python3interp参数依然

Rolling Hash(Rabin-Karp 算法)匹配字符串与anagram串

该算法常用的场景 字符串中查找子串,字符串中查找anagram形式的子串问题. 关于字符串查找与匹配 字符串可以理解为字符数组.而字符可以被转换为整数,他们具体的值依赖于他们的编码方式(ASCII/Unicode).这意味着我们可以把字符串当成一个整形数组.找到一种方式将一组整形数字转化为一个数字,就能够使得我们借助一个预期的输入值来Hash字符串. 既然字符串被看成是数组而不是单个元素,比较两个字符串是否想到就没有比较两个数值来得简单直接.去检查A和B是否相等,我们不得不通过枚举所有的A和B的

行尾匹配-perl5中z和匹配字符串结尾的差异是什么

问题描述 perl5中z和Z匹配字符串结尾的差异是什么 我在使用z和Z匹配的时候没发现差异,各位能不能帮忙解释一下,下面是代码: #!/usr/bin/perl use 5.010; use strict; use warnings; $_ = ""This is a wilma line barney is on another line but this ends in fred and a final dino lines""; if(/lineZ/){ pr

鸟哥的linux私房菜-vim编辑器学习笔记

 为什么使用vim编辑器: 所有的Unix Like 系统都会内建vi 文书编辑器,其他的文书编辑器则不一定会存在: 很多个别软件的编辑接口都会主动呼叫vi (例如未来会谈到的 crontab, visudo, edquota 等指 令): vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计: 因为程序简单,编辑速度相当快速.     vim编辑器的用法总结: 一般模式: vi aa : 如果aa文档存在,则如图所示 如果aa文档不存在,则会提示NEW i:插入模式(

Linux shell 基础之Vim编辑器

vim编辑器在内存缓冲区中处理数据,如在启动vim时未指定文件名,或者这个文件不存在,vim会开辟一段新的缓冲区域来编辑. 如果你在命令行下指定了一个已有文件的名字,vim会将文件的整个内容都读到一块缓冲区域来准备编辑 # 当文件不存在时,会新建一个文件并把缓冲区的内容保存到新创建的文件中 vim mytest # 下面会提示New File # vim编辑器有两种模式,插入模式和普通模式 # 普通模式键入i就可以切换到插入模式 # 插入模式下键入esc键可以退回普通模式 # 如果想放弃对对缓冲