我怎样才能使我的vim的非匹配贪婪?(How can I make my match non gre

2019-06-18 14:54发布

我有大量的标记,看起来像这样的一个大的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?

Answer 1:

相反的.*使用.\{-}

%s/style=".\{-}"//g

此外,见:help non-greedy



Answer 2:

在vim非贪婪搜索是用做{ - }操作。 像这样:

%s/style=".\{-}"//g

试一试:

:help non-greedy


Answer 3:

这有什么错

%s/style="[^"]*"//g


Answer 4:

如果你更舒适的PCRE正则表达式语法,

  1. 支持非贪婪操作,因为你在OP问?; 和
  2. 不需要backwhacking分组和基数操作符(一个完全反直觉的vim的语法要求,因为你不匹配字符串的字符,但指定运营商); 和
  3. 你[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>


Answer 5:

我发现一个很好的解决这一类型的问题是:

:%!sed ...

(或者如果你喜欢perl的)。 IOW,而不是学习vim的正则表达式的特殊性,使用自己熟悉的工具。 使用perl将使? 修改工作ungreedy比赛。



Answer 6:

随着\v (如一些意见建议)

:%s/\v(style|class)\=".{-}"//g


Answer 7:

插件eregex.vim处理Perl样式的非贪婪操作符*?+?



Answer 8:

天儿真好,

Vim的正则表达式处理是不是太辉煌。 我发现,sed的正则表达式的语法是关于vim的功能的正确匹配。

我通常设置搜索高亮显示(:设置hlsearch),然后输入一个斜杠来进入搜索模式后,用正则表达式玩。

编辑:马克,这把戏,以尽量减少贪婪匹配也包括在戴尔多尔蒂的优秀图书“桑达&awk中”( 消毒亚马逊的链接 )。

第三章“了解正则表达式语法”是一个很好的介绍到参与sed和awk更原始的正则表达式的能力。 只有很短的阅读,强烈推荐。

HTH

干杯,



文章来源: How can I make my match non greedy in vim?