首页 文章

如何让我的比赛在vim中不贪婪?

提问于
浏览
433

我有一个很大的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="" ,但我无法完成匹配 .

我的第一次尝试是这样的

%s/style=".*?"//g

但Vim似乎不喜欢 ? . 不幸的是,删除 ? 使得比赛过于贪婪 .

我如何才能使我的比赛不合适?

8 回答

  • 14

    如果你更舒服PCRE正则表达式语法,那

    • 支持非贪婪的运算符?,正如您在OP中所要求的那样;和

    • 不__1681515_不匹配文字字符,但指定运算符);和

    • 你有[g] vim使用perl功能编译,测试使用

    :ver和检查功能;如果perl在那里你很高兴去)

    尝试搜索/替换使用

    :perldo s///
    

    例 . 在img标签中交换src和alt属性:

    <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>
    
  • 10

    插件eregex.vim处理Perl风格的非贪婪运算符 *?+?

  • 665

    而不是 .* 使用 .\{-} .

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

    另外,请参阅 :help non-greedy

  • 1

    使用 \v (如多条评论中所述)

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

    天儿真好,

    Vim的正则表达式处理并不太棒 . 我发现sed的regexp语法是关于vim功能的正确匹配 .

    我通常将搜索突出显示在(:set hlsearch)上,然后在输入斜杠后使用正则表达式进入搜索模式 .

    Edit: 马克,Dale Dougherty出色的书"Sed & Awk"(sanitised Amazon link)也涵盖了最小化贪婪匹配的技巧 .

    第三章“理解正则表达式语法”是sed和awk所涉及的更原始的正则表达式功能的优秀介绍 . 只是简短的阅读和强烈推荐 .

    HTH

    干杯,

  • -4

    使用{ - }运算符在vim中进行非贪婪搜索 . 像这样:

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

    试一试:

    :help non-greedy
    
  • 1

    怎么了?

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

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

    :%!sed ...
    

    (或者perl,如果你愿意的话) . IOW,而不是学习vim的正则表达式特性,使用你已经知道的工具 . 使用perl会使?修饰符工作不匹配的匹配 .

相关问题