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真是强大,对正则表达式的语法扩展也是于主流之外自成体系,难免给我们又增加了一些学习的成本
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内