Mar*_*iek 469 regex vim regex-greedy
我有一个很大的HTML文件,有很多标记,如下所示:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Run Code Online (Sandbox Code Playgroud)
我正在尝试进行Vim搜索和替换以摆脱所有class=""
,style=""
但我无法完成匹配.
我的第一次尝试是这样的
%s/style=".*?"//g
Run Code Online (Sandbox Code Playgroud)
但Vim似乎并不喜欢?
.不幸的是,删除?
使得比赛过于贪婪.
我如何才能使我的比赛不合适?
Ran*_*ris 719
而不是.*
使用.\{-}
.
%s/style=".\{-}"//g
另外,请参阅 :help non-greedy
小智 56
使用{ - }运算符在vim中进行非贪婪搜索.像这样:
%s/style=".\{-}"//g
Run Code Online (Sandbox Code Playgroud)
试一试:
:help non-greedy
Run Code Online (Sandbox Code Playgroud)
Pau*_*lin 48
怎么了?
%s/style="[^"]*"//g
Run Code Online (Sandbox Code Playgroud)
小智 15
如果你更舒服PCRE正则表达式语法,那
你有[g] vim用perl功能编译,测试使用
:ver和检查功能; 如果+ perl在那里你很高兴去)
尝试搜索/替换使用
:perldo s///
Run Code Online (Sandbox Code Playgroud)
例.在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>
Run Code Online (Sandbox Code Playgroud)
Wil*_*ell 12
我发现这类问题的一个很好的解决方案是:
:%!sed ...
(或者perl,如果你愿意的话).IOW,而不是学习vim的正则表达式特性,使用你已经知道的工具.使用perl会使?修饰符工作不匹配的匹配.