我有一个包含很多 ..... 的文档。我想删除所有这些。当我输入时使用 vi
:%s/\<swf[^\/swf>]+\/swf\>//g
我希望这会奏效,但它不匹配任何东西。
最佳答案
您可以使用以下命令从缓冲区中删除所有这些:
:%s!<swf.\{-}/swf>!!
如果您还有可能分成两行的标签,您可以添加
\_
修饰符以使 .
也匹配换行符::%s!<swf\_.\{-}/swf>!!
假设您想删除标签及其包含的内容,如果您只想删除标签并保留内容
:%s!</\?swf.\{-}>!!
笔记:
<
或 >
s
之后的第一个字符:这消除了在模式 编辑:在您发表评论后扩展我的答案
!
而不是 /
这样我就不必在模式中引用反斜杠(参见上面我的第二点) g
修饰符,因为我的 :set gdefault
中一直都有 .vimrc
(这意味着默认情况下 Vim 将替换一行中的所有匹配项,而不仅仅是第一个,从而恢复 /g
的含义) \{-}
是 *
量词的“非贪婪”版本,即它匹配 0 个或多个前面的原子,但尽可能少地使用 -- 这有助于确保您的搜索模式将扩展到第一个“结束标记” “而不是最后一个。 HTH
关于VI中的正则表达式搜索和替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2186554/