我有一個文件有很多< swf ...> ..... </swf>在它。我想刪除所有這些。使用vi時,我鍵入正則表達式搜索和替換在VI
:%s/\<swf[^\/swf>]+\/swf\>//g
我希望這會工作,但它不匹配任何東西。
我有一個文件有很多< swf ...> ..... </swf>在它。我想刪除所有這些。使用vi時,我鍵入正則表達式搜索和替換在VI
:%s/\<swf[^\/swf>]+\/swf\>//g
我希望這會工作,但它不匹配任何東西。
您可以刪除所有這些從緩衝區用這個命令:
:%s!<swf.\{-}/swf>!!
如果你也有可能在兩行進行分割的標籤,你可以添加\_
修改,使.
匹配換行符太:
:%s!<swf\_.\{-}/swf>!!
這個假設你要刪除這兩個標籤,它們包含,如果你只是想擺脫的標籤,並保持內容是什麼
:%s!</\?swf.\{-}>!!
注:
<
或>
s
後把第一個字符:這帶走了必要逃避斜線在你的模式編輯:您的評論
之後延長我的答案!
代替/
,這樣我就不必引用反斜槓在模式(見上面我的第二點)g
修改,因爲我有:set gdefault
在我.vimrc
因爲永遠(這意味着在默認情況下,Vim會替代所有匹配的行,而不是僅僅是第一,所以如果還原的/g
意思)\{-}
是「非常規「*
量詞,即它匹配0或更多的前面的原子,但採取儘可能少的e - 這可以幫助您確保您的搜索模式將擴展到第一個「結束標記」而不是最後一個。HTH
的這裏的問題是,[]
是一個字符類,所以你告訴它的swf開始和結束標記之間,字母s
,w
和f
不能出現在任何地方,以任何順序。
你可以嘗試一個非貪婪的匹配,而不是:
\<swf.\{-}\/swf\>
注意.
不允許換行默認。
雖然我不使用Vim,所以我使用這個guide來發現語法。我希望這是正確的。
謝謝謝謝,一個可行的治療! 我很好奇,但是如何在不使用/ STRING/REPLACE/g格式的情況下工作? { - }是什麼意思? – ktec 2010-02-03 10:05:50
更新了我的回答,詳細瞭解您的評論 – 2010-02-03 10:20:52
Awsome,非常感謝! – ktec 2010-02-04 00:00:06