2012-04-30 62 views
1

我試圖創建一個正則表達式去除所有不以特定前綴開頭的行。使用this tip我想出了這一點:剝去每一行不以某個前綴開頭

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

這似乎並不正常工作。我究竟做錯了什麼?是的,我知道這樣的事實,即它總是將第一行刪除,不管它是否以前綴LAST-MODIFIED:爲前綴。但我確信第一行永遠不會是LAST-MODIFIED:行,所以它應該是安全的。如果我想要完全安全,我建議的修復方法是(?:(?!(\n|^)LAST-MODIFIED:[^\n]+\n).*)

+0

什麼是您的輸入文件? – kev

+0

你在用什麼語言?正則表達式在不同的實現中表現不同。 – 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

編輯: - 糟糕,你想要的行不是以某個前綴開頭。請參見下面的編輯:

如果沒有檢測到多行的內容,你可以很容易地從外殼使用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", "")); 

^匹配行的開始和$結束 週期/匹配點「。」匹配除換行外的任何字符的零次或多次出現

相關問題