2012-04-30 10 views
1

特定の接頭辞で始まらないすべての行を取り除く正規表​​現を作成しようとしています。 this tipを使用しました:特定の接頭辞で始まらないすべての行を削除する

(?:(?!\nLAST-MODIFIED:[^\n]+\n).*) 

これは正しく動作していないようです。私は間違って何をしていますか?そして、はい、私はそれが接頭語LAST-MODIFIED:かどうかにかかわらず、これは常に最初の行を削除するという事実を認識しています。しかし、私は最初の行が決してLAST-MODIFIED:行にならないことを肯定しているので、安全でなければなりません。もし私が完全に安全であることを望むなら、私の提案された修正は(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)になるでしょう。

+0

入力ファイルは何ですか? – kev

+0

あなたはどの言語を使用していますか? Regexは異なる実装では動作が異なります。 – mortb

+0

Qtの正規表現機能を使用しています。 http://doc.trolltech.com/4.7/qregexp.html – Pieter

答えて

4

これがあなたの必要とするものでしょうか?

(^(?!LAST-MODIFIED)[^\n]*)+ 

説明:

  • ^ - ライン
  • (?!LAST-MODIFIED)の始まりと一致する - それは最後の修飾
  • [^\n]*で始まっていないことを確認 - 上記が真である場合には、改行が見つかるまですべて一致してください。
  • + - リピート
+0

^はQtの文字列の先頭にマッチすると思います。 http://doc.trolltech.com/4.7/qregexp.html – Pieter

+0

@Pieter - それがあなたのためにうまくいくならば、それを新しい行に置き換えてください。 –

+0

これは完璧です、ありがとう! – Pieter

0

EDIT: - おっと、特定の接頭辞で始まらない行が必要でした。これはあなたがgrepをしてシェルから簡単にこれを行うことができ、複数行にわたるコンテンツを検出していない場合

grep -v -P "^LAST-MODIFIED:.*" oldfile > newfile 

私は新しいファイルに配管し、それをチェックする提案は、以下の編集を参照してください。データを失う可能性を避けるために、ファイルを直接変更するのではなく、新しいファイルをmv newfile oldfileで古いファイルに移動します。

0

私は、この作品(テスト)あなたが作業しているどのような言語はよく分からないが、中に.NET/C#の:

Regex r = new Regex(@"^(LAST-MODIFIED\:).*$"); 
    Debug.WriteLine(r.Replace("LAST-MODIFIED:2012-01-01", "")); 

^は、行の先頭に一致し、$は/エンド に期間と一致しました"ドット"改行以外の文字が0回以上一致する

関連する問題