524

次のような多くのマークアップを含む大きな HTML ファイルがあります。

<p class="MsoNormal" style="margin: 0in 0in 0pt;">
  <span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>

class=""すべてを取り除くために Vim の検索と置換を実行しようとしていますがstyle=""、マッチを貪欲にしないようにするのに苦労しています。

私の最初の試みはこれでした

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

しかし、Vim は?. 残念ながら、 を削除する?と、一致が貪欲になりすぎます。

どうすればマッチを非貪欲にできますか?

4

8 に答える 8

48

どうしたの

%s/style="[^"]*"//g
于 2009-08-20T12:30:22.410 に答える
17

PCRE 正規表現構文に慣れている場合は、

  1. OPで尋ねたように、貪欲でない演算子をサポートします。と
  2. 逆襲のグループ化演算子とカーディナリティ演算子を必要としません (リテラル文字に一致するのではなく、演算子を指定しているため、まったく直感に反する vim 構文要件)。と
  3. [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>
于 2012-11-20T15:23:47.313 に答える
13

この種の質問に対する適切な解決策は次のとおりです。

:%!sed ...

(または必要に応じてperl)。IOW は、vim の正規表現の特性を学習するのではなく、既に知っているツールを使用します。perl を使用すると、? 修飾子は一致を貪欲にしないように働きます。

于 2009-08-20T12:39:45.817 に答える
5

あり(いくつ\vかのコメントで示唆されているように)

:%s/\v(style|class)\=".{-}"//g
于 2015-09-29T11:25:50.720 に答える
4

プラグインeregex.vimは、Perl スタイルの貪欲でない演算子を処理*?し、+?

于 2016-11-09T00:06:39.240 に答える
-3

こんばんは

Vim の正規表現の処理はあまり優れていません。sed の正規表現構文は、vim の機能とほぼ一致することがわかりました。

私は通常、検索の強調表示を (:set hlsearch) に設定し、スラッシュを入力して検索モードに入った後、正規表現をいじります。

編集:マーク、貪欲なマッチングを最小限に抑えるそのトリックは、デール・ドハティの優れた本「Sed&Awk」(サニタイズされたAmazonリンク)にも記載されています。

第 3 章「正規表現の構文について」は、sed と awk に関連するより原始的な正規表現機能への優れた紹介です。短く読むだけで、強くお勧めします。

HTH

乾杯、

于 2009-08-20T12:42:22.773 に答える