我有一个很大的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 回答
如果你更舒服PCRE正则表达式语法,那
支持非贪婪的运算符?,正如您在OP中所要求的那样;和
不__1681515_不匹配文字字符,但指定运算符);和
你有[g] vim使用perl功能编译,测试使用
:ver和检查功能;如果perl在那里你很高兴去)
尝试搜索/替换使用
例 . 在img标签中交换src和alt属性:
插件eregex.vim处理Perl风格的非贪婪运算符
*?
和+?
而不是
.*
使用.\{-}
.%s/style=".\{-}"//g
另外,请参阅
:help non-greedy
使用
\v
(如多条评论中所述)天儿真好,
Vim的正则表达式处理并不太棒 . 我发现sed的regexp语法是关于vim功能的正确匹配 .
我通常将搜索突出显示在(:set hlsearch)上,然后在输入斜杠后使用正则表达式进入搜索模式 .
Edit: 马克,Dale Dougherty出色的书"Sed & Awk"(sanitised Amazon link)也涵盖了最小化贪婪匹配的技巧 .
第三章“理解正则表达式语法”是sed和awk所涉及的更原始的正则表达式功能的优秀介绍 . 只是简短的阅读和强烈推荐 .
HTH
干杯,
使用{ - }运算符在vim中进行非贪婪搜索 . 像这样:
试一试:
怎么了?
我发现这类问题的一个很好的解决方案是:
(或者perl,如果你愿意的话) . IOW,而不是学习vim的正则表达式特性,使用你已经知道的工具 . 使用perl会使?修饰符工作不匹配的匹配 .