2010-02-11 58 views
10

使用Mercurial,我需要忽略所有文件,除了那些名爲「keepers」的特定目錄中的文件。Mercurial .hgignore Negative Lookahead

就事情而言,使用Regex和Negative Lookahead似乎很容易;然而,儘管我能夠在TortoiseHg中驗證Regex Buddy和其他工具中的正則表達式,但它並不像預期的那樣工作。

文件:

  • 垃圾\ junk.txt
  • 垃圾\文本
  • 飼養員\測試\測試
  • 飼養員\測試\ TEST2 \ hi.txt
  • keepersblah.txt

只有在保持者下的兩個文件不應該被忽略。

這是我希望將工作的正則表達式:

^(?!keepers/).+$ 

遺憾的是,這會導致忽略所有文件。如果我將其更改爲:

^(?!keepers).+$ 

它的工作方式與您的預期相同。這是它忽略任何不以保持者開始的文件/文件夾。但我確實想忽略以守護者開頭的文件。

奇怪的是,如果我把它改成這樣:

^(?!keepers/).+\..+$ 

將文件夾正確地匹配,但如果他們不具有擴展名也不會忽略不是在飼養文件夾中。

任何意見,將不勝感激。

去除死皮ImageShack的鏈接

回答

7

與你的第一個表達的問題是,正則表達式也反對「守護者」本身進行測試。這種情況下,可以用一個附加條件被添加:

^(?!keepers(?:/|$)) 

或(較不緊湊,但容易理解):

^(?!keepers/|keepers$) 
+0

我還試圖'^(?飼養員\ b)中',但失敗反對「keepers.txt」 – eswald 2010-02-11 19:28:27

+0

輝煌!非常感謝,兩人都很完美。我一直在敲我的頭一個小時:) – 2010-02-11 19:36:32

+2

在前瞻斷言中,不需要非捕獲組,因爲它無法捕獲:'^(?! keepers(/ | $))。*' – Tomalak 2010-02-11 19:43:47