Mercurial .hgignore否定前瞻

时间:2010-02-11 19:06:19

标签: regex mercurial tortoisehg hgignore

使用Mercurial,我需要忽略除名为“keepers”的某个目录中的文件以外的所有文件。

从表面上看,使用Regex和Negative Lookahead似乎很容易;但是,尽管我能够在Regex Buddy和其他工具中验证我的正则表达式,但在TortoiseHg中,它并没有按预期工作。

文件:

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

只有守护者下的两个文件不应被忽略。

这是我希望可以使用的正则表达式:

^(?!keepers/).+$

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

^(?!keepers).+$

它可以像你期望的那样工作。也就是说它忽略了任何不以守护者开头的文件/文件夹。但我确实想忽略以守护者开头的文件。

奇怪的是,如果我将其更改为:

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

它将正确匹配该文件夹,但如果没有扩展名,则不会忽略不在keepers文件夹中的文件。

任何建议都将受到赞赏。

删除死亡的ImageShack链接

1 个答案:

答案 0 :(得分:7)

你的第一个表达式的问题是正则表达式还针对“keepers”本身进行了测试。这种情况可以添加一个附加条件:

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

或(不太紧凑,但更容易理解):

^(?!keepers/|keepers$)