Mercurial .hgignore Negative Lookahead

问题描述:

使用Mercurial,我需要忽略所有文件,除了那些名为“keepers”的特定目录中的文件。Mercurial .hgignore Negative Lookahead

就事情而言,使用Regex和Negative Lookahead似乎很容易;然而,尽管我能够在TortoiseHg中验证Regex Buddy和其他工具中的正则表达式,但它并不像预期的那样工作。

文件:

  • 垃圾\ junk.txt
  • 垃圾\文本
  • 饲养员\测试\测试
  • 饲养员\测试\ TEST2 \ hi.txt
  • keepersblah.txt

只有在保持者下的两个文件不应该被忽略。

这是我希望将工作的正则表达式:

^(?!keepers/).+$ 

遗憾的是,这会导致忽略所有文件。如果我将其更改为:

^(?!keepers).+$ 

它的工作方式与您的预期相同。这是它忽略任何不以保持者开始的文件/文件夹。但我确实想忽略以守护者开头的文件。

奇怪的是,如果我把它改成这样:

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

将文件夹正确地匹配,但如果他们不具有扩展名也不会忽略不是在饲养文件夹中。

任何意见,将不胜感激。

去除死皮ImageShack的链接

与你的第一个表达的问题是,正则表达式也反对“守护者”本身进行测试。这种情况下,可以用一个附加条件被添加:

^(?!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