1

特定のプレフィックスで始まらないすべての行を削除する正規表現を作成しようとしています。このヒントを使用して、私はこれを思いついた:

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

これは正しく機能していないようです。私は何が間違っているのですか?そして、はい、接頭辞が付いているかどうかに関係なく、これによって常に最初の行が削除されるという事実を認識してLAST-MODIFIED:います。しかし、私は最初の行が決して行にならないことをLAST-MODIFIED:確信しているので、それは安全であるはずです。私が提案する修正は(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)、完全に安全になりたい場合です。

4

3 に答える 3

5

これはあなたが必要とすることをしますか?

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

説明:

  • ^- 行頭に一致
  • (?!LAST-MODIFIED)- last-modified で始まっていないことを確認してください
  • [^\n]*- 上記が当てはまる場合、改行が見つかるまですべてを一致させます
  • +- 繰り返す
于 2012-04-30T12:14:48.537 に答える
0

編集:-おっと、特定のプレフィックスで始まらない行が必要でした。以下の編集を参照してください。

これで複数行にわたるコンテンツが検出されない場合は、grep を使用してシェルから簡単にこれを行うことができます。

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

mv newfile oldfileデータを失う可能性を避けるために、ファイルを直接変更するのではなく、新しいファイルにパイプしてチェックし、新しいファイルを古いファイルに移動することをお勧めします。

于 2012-04-30T12:20:26.130 に答える
0

どの言語を使用しているかはわかりませんが、.NET/C# ではこれが機能します (テスト済み):

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

^ は行頭に一致し、$ は行末に一致します。ピリオド/ドット "." 改行を除く任意の文字の 0 回以上の出現に一致します

于 2012-04-30T12:24:19.203 に答える