我有大量的标记,看起来像这样的一个大的HTML文件:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
我试图做一个Vim的搜索和替换,以摆脱所有的class=""
及style=""
但我有麻烦了比赛ungreedy。
我第一次尝试是这样的
%s/style=".*?"//g
只不过Vim似乎不喜欢?
。 不幸的是去除?
使得比赛过于贪婪。
我怎样才能让我的比赛ungreedy?
在vim非贪婪搜索是用做{ - }操作。 像这样:
%s/style=".\{-}"//g
试一试:
:help non-greedy
如果你更舒适的PCRE正则表达式语法,
- 支持非贪婪操作,因为你在OP问?; 和
- 不需要backwhacking分组和基数操作符(一个完全反直觉的vim的语法要求,因为你不匹配字符串的字符,但指定运营商); 和
你[G] VIM编译perl的功能,测试使用
:版本和检查功能; 如果+ Perl是有你去好)
尝试查找/替换使用
:perldo s///
例。 交换SRC和alt属性在img标签:
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>
:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
我发现一个很好的解决这一类型的问题是:
:%!sed ...
(或者如果你喜欢perl的)。 IOW,而不是学习vim的正则表达式的特殊性,使用自己熟悉的工具。 使用perl将使? 修改工作ungreedy比赛。
随着\v
(如一些意见建议)
:%s/\v(style|class)\=".{-}"//g
插件eregex.vim处理Perl样式的非贪婪操作符*?
和+?
天儿真好,
Vim的正则表达式处理是不是太辉煌。 我发现,sed的正则表达式的语法是关于vim的功能的正确匹配。
我通常设置搜索高亮显示(:设置hlsearch),然后输入一个斜杠来进入搜索模式后,用正则表达式玩。
编辑:马克,这把戏,以尽量减少贪婪匹配也包括在戴尔多尔蒂的优秀图书“桑达&awk中”( 消毒亚马逊的链接 )。
第三章“了解正则表达式语法”是一个很好的介绍到参与sed和awk更原始的正则表达式的能力。 只有很短的阅读,强烈推荐。
HTH
干杯,